在Spark/Scala中将数组[行]转换为数据帧
我想将在Spark/Scala中将数组[行]转换为数据帧,scala,apache-spark,spark-dataframe,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 =
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
中计算记录时,它给了我一个计数以及一个警告,其中一个阶段包含一个非常大的任务。我想我做错了什么。请帮忙 第一行有一个bugcollect
返回数组,而map
是一种对数据帧/rdd进行操作的方法
请改为尝试
val arrayOfRows=myDataFrame.map(t=>myfun(t)).collect()
。当我更改org.apache.spark.SparkException的顺序时,我遇到了这个错误:任务不序列化arrayOfRows实际上是DataFrame类型的,因此不需要第2行和第3行(sc.parallelize接受RDD而不是数据帧,这是新异常背后的原因)我一进入第一行就得到了错误val arrayOfRows=myDataFrame.collect().map(t=>myfun(t))
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