如何从Scala的迭代列表创建DataFrame?

llmtgqce  于 2022-11-09  发布在  Scala
关注(0)|答案(5)|浏览(233)

我有以下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)

为什么?

8hhllhi2

8hhllhi21#

这就是Spark暗示对象的意义所在。它允许您将常见的Scala集合类型转换为DataFrame/DataSet/RDD。下面是Spark 2.0的一个例子,但它在旧版本中也存在

import org.apache.spark.sql.SparkSession
val values = List(1,2,3,4,5)

val spark = SparkSession.builder().master("local").getOrCreate()
import spark.implicits._
val df = values.toDF()

编辑:我刚刚意识到你是在追求2D榜单。这是我在Spark壳上试过的东西。我将2D列表转换为元组列表,并使用隐式转换为DataFrame:

val values = List(List("1", "One") ,List("2", "Two") ,List("3", "Three"),List("4","4")).map(x =>(x(0), x(1)))
import spark.implicits._
val df = values.toDF

编辑2:MTT最初的问题是如何从Scala列表为2D列表创建Spark DataFrame,这是一个正确的答案。最初的问题是https://stackoverflow.com/revisions/38063195/1,后来问题被更改为与公认的答案相匹配。添加此编辑,以便其他人在寻找与原始问题相似的内容时可以找到它。

ar7v8xwq

ar7v8xwq2#

正如zero323提到的,我们需要首先将List[Iterable[Any]]转换为List[Row],然后将行放入RDD中,并为Spark数据框准备模式。
要将List[Iterable[Any]]转换为List[Row],我们可以说

val rows = values.map{x => Row(x:_*)}

然后有了像schema这样的模式,我们就可以进行RDD

val rdd = sparkContext.makeRDD[RDD](rows)

并最终创建Spark数据框

val df = sqlContext.createDataFrame(rdd, schema)
7ivaypg9

7ivaypg93#

最简单的方法:

val newList = yourList.map(Tuple1(_))
val df = spark.createDataFrame(newList).toDF("stuff")
vsmadaxz

vsmadaxz4#

在Spark 2中,我们只需通过Tods API将List转换为DS即可使用DataSet

val ds = list.flatMap(_.split(",")).toDS() // Records split by comma

val ds = list.toDS()

这比rdddf更方便

uqzxnwby

uqzxnwby5#

我找到的最简洁的方式是:

val df = spark.createDataFrame(List("A", "B", "C").map(Tuple1(_)))

相关问题