Я пытаюсь создать фрейм данных с одной строкой, значения которой равны нулю.
val df = Seq(null,null).toDF("a","b")
Возникли проблемы, даже если мы использовали null.instanceof, также безуспешно.
val df = Seq(null.asInstanceOf[Integer],null.asInstanceOf[Integer]).toDF("a","b")
Это работает, но мне не нравится указывать тип поля, в основном это должна быть строка.
Похоже на опечатку в 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()
}