我有以下Scala值:
val values: List[Iterable[Any]] = Traces().evaluate(features).toList
我想将其转换为DataFrame。
当我尝试以下操作时:
sqlContext.createDataFrame(values)
我收到了这样的错误:
error: overloaded method value createDataFrame with alternatives:
[A <: Product](data: Seq[A])(implicit evidence$2: reflect.runtime.universe.TypeTag[A])org.apache.spark.sql.DataFrame
[A <: Product](rdd: org.apache.spark.rdd.RDD[A])(implicit evidence$1: reflect.runtime.universe.TypeTag[A])org.apache.spark.sql.DataFrame
cannot be applied to (List[Iterable[Any]])
sqlContext.createDataFrame(values)
为什么?
5条答案
按热度按时间8hhllhi21#
这就是Spark暗示对象的意义所在。它允许您将常见的Scala集合类型转换为DataFrame/DataSet/RDD。下面是Spark 2.0的一个例子,但它在旧版本中也存在
编辑:我刚刚意识到你是在追求2D榜单。这是我在Spark壳上试过的东西。我将2D列表转换为元组列表,并使用隐式转换为DataFrame:
编辑2:MTT最初的问题是如何从Scala列表为2D列表创建Spark DataFrame,这是一个正确的答案。最初的问题是https://stackoverflow.com/revisions/38063195/1,后来问题被更改为与公认的答案相匹配。添加此编辑,以便其他人在寻找与原始问题相似的内容时可以找到它。
ar7v8xwq2#
正如zero323提到的,我们需要首先将
List[Iterable[Any]]
转换为List[Row]
,然后将行放入RDD
中,并为Spark数据框准备模式。要将
List[Iterable[Any]]
转换为List[Row]
,我们可以说然后有了像
schema
这样的模式,我们就可以进行RDD并最终创建Spark数据框
7ivaypg93#
最简单的方法:
vsmadaxz4#
在Spark 2中,我们只需通过Tods API将List转换为DS即可使用DataSet
或
这比
rdd
或df
更方便uqzxnwby5#
我找到的最简洁的方式是: