web-dev-qa-db-ja.com

Javaでsparkを使用してnull値をDataframeの特定の値に置き換える方法は?

Javaを使用してSparkに実装されたロジスティック回帰アルゴリズムの精度を改善しようとしています。このため、列に存在するNull値または無効な値を、その列の最も頻繁な値に置き換えようとしています。例えば:-

Name|Place
a   |a1
a   |a2
a   |a2
    |d1
b   |a2
c   |a2
c   |
    |
d   |c1

この場合、列「Name」のすべてのNULL値を「a」に、列「Place」のすべてのNULL値を「a2」に置き換えます。今まで、特定の列の中で最も頻繁な列のみを抽出することができました。 nullまたは無効な値をその列の最も頻繁な値で置き換える方法の2番目のステップで助けてください。

18
PirateJack

.na.fill関数を使用できます(これは org.Apache.spark.sql.DataFrameNaFunctions の関数です)。

基本的に必要な関数は次のとおりです:def fill(value: String, cols: Seq[String]): DataFrame

列を選択でき、nullまたはNaNを置き換える値を選択します。

あなたの場合、次のようなものになります。

val df2 = df.na.fill("a", Seq("Name"))
            .na.fill("a2", Seq("Place"))
31
Rami

データフレームのfill(String value、String [] columns)メソッドを使用すると、指定された列のリストのNull値が指定した値に自動的に置き換えられます。

したがって、Nullを置き換える値が既にわかっている場合は...:

String[] colNames = {"Name"}
dataframe = dataframe.na.fill("a", colNames)

残りの列についても同じことができます。

9
Dan Carter

DataFrame.na.fill()を使用してnullを何らかの値に置き換えることができます。一度に更新するには、次のようにします。

val map = Map("Name" -> "a", "Place" -> "a2")

df.na.fill(map).show()

ただし、不良レコードも置換する場合は、まず不良レコードを検証する必要があります。これを行うには、like関数で正規表現を使用します。

4
Shankar Koirala

NULL値を特定の文字列で置き換えるために、JavaのSparkにあるfill関数を使用しました。置換されるWordと一連の列名を受け入れます。ここに私がそれを実装した方法があります:-

List<String> colList = new ArrayList<String>();
colList.add(cols[i]);
Seq<String> colSeq = scala.collection.JavaConverters.asScalaIteratorConverter(colList.iterator()).asScala().toSeq();
data=data.na().fill(Word, colSeq);
0
PirateJack