在Spark / Scala中将Array [Row]转换为DataFrame

时间:2016-06-27 21:13:48

标签: scala apache-spark spark-dataframe

我想将Array[org.apache.spark.sql.Row]转换为DataFrame。 有谁能建议我一个更好的方法?

我尝试先将其转换为RDD,然后尝试将其转换为Dataframe,但当我对DataFrame执行任何操作时,都会显示异常。

val arrayOfRows = myDataFrame.collect().map(t => myfun(t))
val distDataRDD = sc.parallelize(arrayOfRows)
val newDataframe = sqlContext.createDataFrame(distDataRDD,myschema)

此处myfun()是一个返回Row (org.apache.spark.sql.Row)的函数。 数组中的内容是正确的,我可以毫无问题地打印它。

但是当我试图计算RDD中的记录时,它给了我计数以及一个警告,其中一个阶段包含一个非常大的任务。我想我做错了什么。请帮忙。

2 个答案:

答案 0 :(得分:1)

你在第一行有一个错误。 collect返回一个数组,而map是一个对DataFrames / RDD进行操作的方法。

请尝试val arrayOfRows = myDataFrame.map(t => myfun(t)).collect()

答案 1 :(得分:1)

case class PgRnk (userId : Long , pageRank: Double ) 
// create a case class 

sc.parallelize(pg10.map(r1 => PgRnk(r1.getLong(0), r1.getDouble(1)))).toDS() 
// convert into a dataset, sc.parallelize converts the array into a RDD, and then to DS