【问题标题】:Creating a Spark DataFrame from a single string从单个字符串创建 Spark DataFrame
【发布时间】:2017-02-19 04:23:52
【问题描述】:

我正在尝试采用硬编码字符串并将其转换为 1 行 Spark DataFrame(具有 StringType 类型的单列),这样:

String fizz = "buzz"

会产生一个 DataFrame,其 .show() 方法如下所示:

+-----+
| fizz|
+-----+
| buzz|
+-----+

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

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

df.show()

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

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)

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


更新:

尝试:

sqlContext.sparkContext.parallelize(rawData).toDF()

我得到一个看起来像这样的 DF:

+----+
|  _1|
+----+
|buzz|
+----+

【问题讨论】:

    标签: scala apache-spark spark-dataframe


    【解决方案1】:

    试试:

    sqlContext.sparkContext.parallelize(rawData).toDF()
    

    在 2.0 中,您可以:

    import spark.implicits._
    
    rawData.toDF
    

    (可选)为toDF 提供一系列名称:

    sqlContext.sparkContext.parallelize(rawData).toDF("fizz")
    

    【讨论】:

    • 感谢@LostInOverflow (+1) - 我想我快到了,请查看我的更新。我得到一个单行 DF,其中包含正确的值("buzz" 字符串),但列名是“_1”...想法?
    • Dataframe 类似于带有列/标题的表格格式的数据集。在第一种情况下,您创建了未指定列名的数据框,因此它将默认列分配为“_1”、“_2”。
    • 这在 Java 中如何工作? sparkContext.parallelize 采用两个附加参数:numSlices 和 ClassTag。第二个我不清楚。
    【解决方案2】:

    在 Java 中,以下工作:

    List<String> textList = Collections.singletonList("yourString");
    SQLContext sqlContext = new SQLContext(sparkContext);
    Dataset<Row> data = sqlContext
          .createDataset(textList, Encoders.STRING())
          .withColumnRenamed("value", "text");
    

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 2016-11-21
      • 2019-07-08
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      相关资源
      最近更新 更多