将 RDD 转换为数据帧 int vs Double
Converting RDD into a dataframe int vs Double
为什么可以使用隐式方法将 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]
火花2.x
在 Spark 2.x toDF
中使用 SparkSession.implicits
并为具有 Encoder
的任何类型提供 rddToDatasetHolder
和 localSeqToDatasetHolder
因此
val spark: SparkSession = ???
import spark.implicits._
两者:
Seq(1.1, 2.34, 3.4).toDF()
和
sc.parallelize(Seq(1.1, 2.34, 3.4)).toDF()
有效。
火花1.x
这是不可能的。排除 Product
类型 SQLContext
仅为 RDD[Int]
(intRddToDataFrameHolder
)、RDD[Long]
(longRddToDataFrameHolder
) 和 RDD[String]
(stringRddToDataFrameHolder
).您总是可以先 map
到 RDD[(Double,)]
:
sc.parallelize(Seq(1.1, 2.34, 3.4)).map(Tuple1(_)).toDF()
为什么可以使用隐式方法将 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]
火花2.x
在 Spark 2.x toDF
中使用 SparkSession.implicits
并为具有 Encoder
的任何类型提供 rddToDatasetHolder
和 localSeqToDatasetHolder
因此
val spark: SparkSession = ???
import spark.implicits._
两者:
Seq(1.1, 2.34, 3.4).toDF()
和
sc.parallelize(Seq(1.1, 2.34, 3.4)).toDF()
有效。
火花1.x
这是不可能的。排除 Product
类型 SQLContext
仅为 RDD[Int]
(intRddToDataFrameHolder
)、RDD[Long]
(longRddToDataFrameHolder
) 和 RDD[String]
(stringRddToDataFrameHolder
).您总是可以先 map
到 RDD[(Double,)]
:
sc.parallelize(Seq(1.1, 2.34, 3.4)).map(Tuple1(_)).toDF()