我想将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
中的记录时,它给了我计数以及一个警告,其中一个阶段包含一个非常大的任务。我想我做错了什么。请帮忙。
答案 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