【发布时间】:2017-12-04 08:13:33
【问题描述】:
所以我有一个变量data,它是一个RDD[Array[String]]。我想迭代它并比较相邻的元素。为此,我必须从 RDD 创建一个数据集。
我尝试以下,sc 是我的SparkContext:
import org.apache.spark.sql.SQLContext
val sqc = new SQLContext(sc)
val lines = sqc.createDataset(data)
我得到以下两个错误:
错误:(12, 34) 无法找到存储在数据集中的类型的编码器。 原始类型(Int、String 等)和产品类型(案例类) 通过导入 sqlContext.implicits._ 支持 序列化其他类型将在以后的版本中添加。 val 行 = sqc.createDataset(data)
错误:(12, 34) 方法 createDataset 的参数不足: (隐含证据$4: org.apache.spark.sql.Encoder[Array[String]])org.apache.spark.sql.Dataset[Array[String]]。 未指定值参数evidence$4。 val 行 = sqc.createDataset(data)
当然,我知道我需要传递一个编码器参数,但是,在这种情况下它会是什么以及如何导入编码器?当我尝试自己时,它说createDataset 不会将其作为参数。
有类似的问题,但没有回答如何使用编码器参数。如果我的 RDD 是 RDD[String],它工作得非常好,但是在这种情况下它是 RDD[Array[String]]。
【问题讨论】:
-
import sqc.implicits._ -
我不认为它是重复的,因为我已经阅读了这些问题。
-
那么如果我导入它,我该如何使用编码器呢? (我将什么传递给第二个参数?)
-
一旦隐含在范围内,Spark 将自动转换它可以转换的任何东西。如果您想更具体地了解它,可以使用:
sqc.createDataset(rdd)(newStringArrayEncoder) -
import sqlContext.implicits._for spark ver spark.implicits._ for Spark2+
标签: scala apache-spark dataset rdd apache-spark-1.6