将RDD转换为数据帧int与Double

时间:2016-03-09 08:52:23

标签: apache-spark apache-spark-sql

为什么可以使用隐式方法

将rdd [int]转换为数据帧
import sqlContext.implicits._

//Concatenate rows
val rdd1 = sc.parallelize(Array(4,5,6)).toDF()
rdd1.show()

rdd1: org.apache.spark.sql.DataFrame = [_1: int]
+---+
| _1|
+---+
|  4|
|  5|
|  6|
+---+

但是rdd [Double]引发了错误:

val rdd2 = sc.parallelize(Array(1.1,2.34,3.4)).toDF()
error: value toDF is not a member of org.apache.spark.rdd.RDD[Double]

1 个答案:

答案 0 :(得分:4)

Spark 2.x

在Spark 2.x toDF中使用SparkSession.implicits并为rddToDatasetHolder提供localSeqToDatasetHolderEncoder,因此

val spark: SparkSession = ???
import spark.implicits._

两个

Seq(1.1, 2.34, 3.4).toDF()

sc.parallelize(Seq(1.1, 2.34, 3.4)).toDF()

有效。

Spark 1.x

这是不可能的。排除Product类型SQLContext仅为RDD[Int]intRddToDataFrameHolder),RDD[Long]longRddToDataFrameHolder)和RDD[String]提供隐式转化({ {1}})。您可以始终stringRddToDataFrameHoldermap

RDD[(Double,)]