所以我有一个变量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)找不到存储在数据集中的类型的编码器。通过导入sqlContext. implics支持原始类型(Int,String等)和产品类型(case类)。_将在未来版本中添加对序列化其他类型的支持。val线=sqc.createDataset(数据)
错误:(12,34)方法createDataset的参数不足:(隐式证据4美元:org. apache.park.sql.Encoder[Array[String]])org.apache.park.sql.Dataset[Array[String]]。未指定的值参数证据4美元。val线=sqc.createDataset(数据)
当然,我知道我需要传递编码器参数,但是,在这种情况下会是什么以及如何导入编码器?当我自己尝试时,它说createDataset
不将其作为参数。
有类似的问题,但他们没有回答如何使用编码器参数。如果我的RDD是一个RDD[String]
它工作得很好,但是在这种情况下它是RDD[Array[String]]
。
问题中的所有评论都试图告诉你以下事情
你说你有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
现在将rdd
转换为dataframe
是调用. toDF
,但在此之前您需要import
的含义。_
的sqlContext
如下
val sqc = new SQLContext(sc)
import sqc.implicits._
rdd.toDF().show(false)
你应该有dataframe
作为
+------+
|value |
+------+
|[a, b]|
|[d, e]|
|[g, f]|
|[e, r]|
+------+
这不是很简单吗?