36

テスト用のデータフレームを手動で作成しています。それを作成するコードは次のとおりです。

case class input(id:Long, var1:Int, var2:Int, var3:Double)
val inputDF = sqlCtx
  .createDataFrame(List(input(1110,0,1001,-10.00),
    input(1111,1,1001,10.00),
    input(1111,0,1002,10.00)))

したがって、スキーマは次のようになります。

root
 |-- id: long (nullable = false)
 |-- var1: integer (nullable = false)
 |-- var2: integer (nullable = false)
 |-- var3: double (nullable = false)

これらの変数のそれぞれに対して「nullable = true」を作成したいと思います。最初から宣言するか、作成後に新しいデータフレームに切り替えるにはどうすればよいですか?

4

7 に答える 7

34

別のオプションとして、データフレームをその場で変更する必要があり、再作成が不可能な場合は、次のようなことができます。

.withColumn("col_name", when(col("col_name").isNotNull, col("col_name")).otherwise(lit(null)))

Spark は、この列に が含まれている可能性がnullあると判断し、nullability を に設定しtrueます。また、 を使用udfして値を でラップすることもできますOption。ストリーミングの場合でも問題なく動作します。

于 2017-09-08T15:10:19.857 に答える