私のようなスキーマに何か持っている -Spark 2のデータフレームでNone値を受け入れる方法を教えてください。
val schema = StructType(Seq (
StructField("a", StringType, true),
StructField("b", StringType, true),
StructField("c", StringType, true)
))
and making a dataframe like -
import scala.collection.JavaConverters._
val listrow: List[Row] = List(Row("E-001", "P-001", None), Row("E-001", "P-001", "Attending"))
val rdd = sqlContext.sparkContext.parallelize(listrow)
val df = sqlContext.createDataFrame(rdd, scm)
は今、私はdf.first()を行うときに、私はエラーを取得し、の本質がある - java.lang.RuntimeException:エラーをエンコードする際に: java.lang.RuntimeException:scala.None $は文字列のスキーマに有効な外部型ではありません
このようにdfを作成する必要があることに注意してください。上記は単なる例ですが、プロダクションのコードは少し複雑です。私はそれがSpark 1.6で動作していたと思いますが、Spark 2.0.1では失敗し始めました。これはエンコーダーと関係がありますか?一部のデータは常にNoneを持ち、dfはそれを処理する必要があることに注意してください。これを処理する方法はありますか、データにはNoneがありませんか?
誰もがこれを見て、おそらく解決策が分かっているのですか?
ありがとうございます!
あなたの列には文字列が必要ですが、 'None'は文字列ではありません。 Noneを文字列に変換するか、 'String'の代わりに' Option [String] 'を受け入れ、' Option [String] 'に文字列を変換するように列を変更してください。本当に、私はそれらの 'None'sを最初に生成しているコードを修正したいと思っています。それは大きな設計上の欠陥のようです。 – puhlen
私は同意します。しかし、これに対応するためにスキーマで行うことができるものはありますか? –
データフレーム内のデータはどのように見えますか?文字通り、異なるタイプ(オプションと文字列)が同じ列にあるか、両方のタイプを挿入して、それらを1つのタイプに自動的にホモジナイズできるようにしたいですか? – puhlen