Инициализация DataFrame с нулевыми значениями

Я пытаюсь создать фрейм данных с одной строкой, значения которой равны нулю.

val df = Seq(null,null).toDF("a","b")

Возникли проблемы, даже если мы использовали null.instanceof, также безуспешно.

val df = Seq(null.asInstanceOf[Integer],null.asInstanceOf[Integer]).toDF("a","b")

Это работает, но мне не нравится указывать тип поля, в основном это должна быть строка.


1
467
4

Ответы:

Похоже на опечатку в asInstanceOf, у меня все сработало:

       List(null.asInstanceOf[Integer],null.asInstanceOf[Integer]).toDF("a").show(false)

Решено

Я предполагаю, что вам нужен двухколоночный DF, в этом случае каждая запись должна быть кортежем или case-классом. В этом случае вы также можете явно указать тип Seq, чтобы не использовать asInstanceOf:

val df = Seq[(Integer, Integer)]((null, null)).toDF("a","b")

import org.apache.spark.rdd.RDD
import org.apache.spark.sql.types.{IntegerType, StructField, StructType}
import org.apache.spark.sql.{DataFrame, Row, SparkSession}

object SparkApp extends App {

  val sparkSession: SparkSession = SparkSession.builder()
    .appName("Spark_Test_App")
    .master("local[2]")
    .getOrCreate()

  val schema: StructType = StructType(
    Array(
      StructField("a", IntegerType, nullable = true),
      StructField("b", IntegerType, nullable = true)
    )
  )

  import sparkSession.implicits._
  val nullRDD: RDD[Row] = Seq((null, null)).toDF("a", "b").rdd

  val df: DataFrame = sparkSession.createDataFrame(nullRDD, schema)

  df.printSchema()

  df.show()

  sparkSession.stop()
}

Я предпочитаю использовать Option.empty[A]:

val df = Seq((Option.empty[Int],Option.empty[Int])).toDF("a","b")