2017-05-21 22 views
0

データフレームにn個の列があり、これらの列の空の文字列をnullに置き換えたいとします。Sparkデータフレームで特定の値をnullに置き換えます。

私はそれらの両方が動作しませんでした

val ReadDf = rawDF.na.replace("columnA", Map("" -> null)); 

val ReadDf = rawDF.withColumn("columnA", if($"columnA"=="") lit(null) else $"columnA"); 

を使用してみました。

いずれのリードも高く評価されます。ありがとう。

+1

ここに多くのエラーがあり、それはちょうど、空の文字列を置き換えるに関連していませんヌルだけでなくjdbcエラーもあり、実際には再現できないため、現在の記述と情報で2番目のエラーを解決することはできません。閉鎖の対象であるので、あなたの質問を見直してください! – eliasah

+0

私が理解していないことの1つは、[この] [1]が私が尋ねた質問にどのように関連しているかです。それはMYSQLの文字列の配列について話して、私の質問は空の文字列をデータフレーム内のヌルに置き換えることでした。誰かが私を啓発することはできますか? –

+0

ここにあります。私は、この質問が重複しているとして閉鎖することに投票していませんが、前のコメントで述べたように、2つの異なるエラーがあり、最新のエラーメッセージは有権者の質問に関連しています。 – eliasah

答えて

1

replaceが値をヌルに置き換えることを防止するバグにより、最初のアプローチの継ぎ目が失敗する場合があります。hereを参照してください。

あなたはエグゼキュータ側のデータフレームの指示のためのドライバ側Scalaのコードを混乱しているので、あなたの第二のアプローチは失敗します。あなたのif-else式は(とないレコードごと)ドライバーにたらを評価されます。それをwhen関数への呼び出しで置き換えたいと思うでしょう。また、列の値を比較するために、あなたは===演算子を使用する必要がある、とだけでなく、運転手側にColumnオブジェクトを比較Scalaの==は:

import org.apache.spark.sql.functions._ 

rawDF.withColumn("columnA", when($"columnA" === "", lit(null)).otherwise($"columnA")) 
関連する問題