toDF()不处理RDD

时间:2016-02-16 19:42:01

标签: scala apache-spark apache-spark-sql row rdd

我有一行名为RowRDD的RDD。我只是想转换成DataFrame。从我在互联网上看到的不同地方的例子中,我看到我正在尝试RowRDD.toDF()我收到错误:

value toDF is not a member of org.apache.spark.rdd.RDD[org.apache.spark.sql.Row]

1 个答案:

答案 0 :(得分:6)

它不起作用,因为Row不是Product类型而createDataFrame只有RDD参数的RDD[A]参数仅定义为A <: Product RDD[Row]

如果要使用Row,则必须提供架构作为第二个参数。如果你想到它应该是显而易见的。 Any只是RDD的容器,因此它无法为模式推断提供足够的信息。

假设这与your previous question中定义的import org.apache.spark.sql.types._ import org.apache.spark.rdd.RD val rowRdd: RDD[Row] = ??? val schema = StructType( (1 to rowRdd.first.size).map(i => StructField(s"_$i", StringType, false)) ) val df = sqlContext.createDataFrame(rowRdd, schema) 相同,那么架构很容易生成:

Alex,10,0,6,3,7,4
Bob, 6,3,7,2,1,8