从单个字符串创建Spark DataFrame

sme*_*eeb 5 scala apache-spark spark-dataframe

我正在尝试使用硬编码的String并将其转换为1行Spark DataFrame(具有单列类型StringType),以便:

String fizz = "buzz"
Run Code Online (Sandbox Code Playgroud)

将导致DataFrame的.show()方法如下所示:

+-----+
| fizz|
+-----+
| buzz|
+-----+
Run Code Online (Sandbox Code Playgroud)

到目前为止,我最好的尝试是:

val rawData = List("fizz")
val df = sqlContext.sparkContext.parallelize(Seq(rawData)).toDF()

df.show()
Run Code Online (Sandbox Code Playgroud)

但是我得到以下编译器错误:

java.lang.ClassCastException: org.apache.spark.sql.types.ArrayType cannot be cast to org.apache.spark.sql.types.StructType
    at org.apache.spark.sql.SQLContext.createDataFrame(SQLContext.scala:413)
    at org.apache.spark.sql.SQLImplicits.rddToDataFrameHolder(SQLImplicits.scala:155)
Run Code Online (Sandbox Code Playgroud)

关于我哪里出错的想法?另外,如何设置"buzz"列的行值fizz


更新:

试:

sqlContext.sparkContext.parallelize(rawData).toDF()
Run Code Online (Sandbox Code Playgroud)

我得到一个DF看起来像:

+----+
|  _1|
+----+
|buzz|
+----+
Run Code Online (Sandbox Code Playgroud)

小智 6

尝试:

sqlContext.sparkContext.parallelize(rawData).toDF()
Run Code Online (Sandbox Code Playgroud)

在2.0中你可以:

import spark.implicits._

rawData.toDF
Run Code Online (Sandbox Code Playgroud)

可选择提供一系列名称toDF:

sqlContext.sparkContext.parallelize(rawData).toDF("fizz")
Run Code Online (Sandbox Code Playgroud)