簡體   English   中英

如何從Scala的Iterables列表創建DataFrame?

[英]How to create DataFrame from Scala's List of Iterables?

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

為什么?

那就是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()

編輯:剛意識到你是二維列表之后。 這是我在spark-shell上嘗試過的東西。 我將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

Edit2:MTT最初的問題是如何從scala列表中為2d列表創建spark數據框,這是正確的答案。 原始問題是https://stackoverflow.com/revisions/38063195/1后來該問題已更改為與已接受的答案匹配。 添加此修改,以便其他人在尋找類似於原始問題的內容時也可以找到它。

正如zero323提到的,我們需要首先將List[Iterable[Any]]轉換為List[Row] ,然后將行放入RDD並為spark數據幀准備架構。

要將List[Iterable[Any]]轉換為List[Row] ,我們可以說

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

然后擁有諸如schema之類的schema ,我們可以使RDD

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

最后創建一個火花數據框架

val df = sqlContext.createDataFrame(rdd, schema)

最簡單的方法:

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

在Spark 2中,我們可以通過僅通過toDS API將列表轉換為DS來使用DataSet

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

要么

val ds = list.toDS()

rdddf更方便

我發現的最簡潔的方法是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM