1

所以我有一个变量dataRDD[Array[String]]. 我想迭代它并比较相邻的元素。为此,我必须从 RDD 创建一个数据集。

我尝试以下,sc是我的SparkContext

import org.apache.spark.sql.SQLContext

val sqc = new SQLContext(sc)
val lines = sqc.createDataset(data)

我得到以下两个错误:

错误:(12, 34) 无法找到存储在数据集中的类型的编码器。通过导入 sqlContext.implicits 支持原始类型(Int、String 等)和产品类型(案例类)。未来版本中将添加对序列化其他类型的支持。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 是 aRDD[String]它工作得很好,但是在这种情况下它是RDD[Array[String]].

4

1 回答 1

1

问题中的所有评论都试图告诉您以下内容

你说你有RDD[Array[String]],我通过执行以下操作创建

val rdd = sc.parallelize(Seq(Array("a", "b"), Array("d", "e"), Array("g", "f"), Array("e", "r")))   //rdd: org.apache.spark.rdd.RDD[Array[String]] = ParallelCollectionRDD[0] at parallelize at worksheetTest.sc4592:13

现在转换rdddataframe调用但在.toDF此之前你需要import implicits._如下sqlContext

val sqc = new SQLContext(sc)
import sqc.implicits._
rdd.toDF().show(false)

你应该dataframe

+------+
|value |
+------+
|[a, b]|
|[d, e]|
|[g, f]|
|[e, r]|
+------+

这一切不简单吗?

于 2017-12-07T15:57:47.083 回答