toDF()不处理RDD

uh_*_*boi 1 scala row apache-spark rdd apache-spark-sql

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

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

zer*_*323 6

它不起作用,因为Row它不是一个Product类型,并且只为where 定义了createDataFrame单个RDD参数.RDD[A]A <: Product

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

假设这与上一个问题中RDD定义的相同,则很容易生成模式:

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)
Run Code Online (Sandbox Code Playgroud)