2016-11-03 4 views
2

私は以下のデータセットを持っており、いくつかのnull値を含んでいます。sparkのfillnaを使用してnull値を置き換える必要があります。スパークfillNaがnull値を置き換えない

DATAFRAME:

df = spark.read.format("com.databricks.spark.csv").option("header‌​","true").load("/sam‌​ple.csv") 

>>> df.printSchema(); 
root 
|-- Age: string (nullable = true) 
|-- Height: string (nullable = true) 
|-- Name: string (nullable = true) 

>>> df.show() 
+---+------+-----+ 
|Age|Height| Name| 
+---+------+-----+ 
| 10| 80|Alice| 
| 5| null| Bob| 
| 50| null| Tom| 
| 50| null| null| 
+---+------+-----+ 

>>> df.na.fill(10).show() 

私はNAが同じデータフレームが再び登場変わっdosen'tそれを値あげます。

+---+------+-----+ 
|Age|Height| Name| 
+---+------+-----+ 
| 10| 80|Alice| 
| 5| null| Bob| 
| 50| null| Tom| 
| 50| null| null| 
+---+------+-----+ 

新しいデータフレームを作成し、その値をデータフレームに保存しようとしましたが、結果は変更されていません。

>>> df2 = df.na.fill(10) 

null値を置き換える方法は? fill naを使用して可能な方法を教えてください。 ありがとうございました。

+0

どのようにDataFrameを作成し、そのスキームを印刷できますか? – eliasah

+0

'df = spark.read.format(" com.databricks.spark.csv ")オプション(" header "、" true ")。load("/sample.csv ")'これは私のdfです。 –

+0

あなたの質問をd​​f.printSchema()で更新し、コメントとして追加しないでください。 – eliasah

答えて

4

Heightの列は数値ではないようです。 df.na.fill(10)と呼ぶと、sparkは数値型の列である10という種類に一致する列でヌルのみを置き換えます。

Height列を文字列にする必要がある場合は、df.na.fill('10').show()を試してください。それ以外の場合はIntegerType()にキャストする必要があります。

+0

'df.na.fill('10 ')。show()'このコードで試してみますが、正しく動作しません。どのようにして 'int'にキャストできますか? –

+0

ここでは、データフレーム列をキャストするためのドキュメントを見つけることができます:http://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.Column.cast - ''int''型'IntegerType()'は数値を格納するための有効な型です。 – Mariusz

+0

@Marisuzは働いている情報をありがとう。 df.na.fill({'age':50、 'name': '}'の代わりに 'df.na.fill(" sample ")'のような文字列を直接入力することはできますか?サンプル '}) '。 –

2

必要に応じて、各列に特定のデフォルト値を指定することもできます。

df.na.fill({'Height': '10', 'Name': 'Bob'}) 
関連する問題