我有一个场景,在这个场景中,我希望将数据格式ArrayRow的结果转换为RDDRow。我尝试过使用并行化,但我不想使用它,因为它需要在一个系统中包含整个数据,这在生产盒中是不可行的。
val Bid = spark.sql("select Distinct DeviceId, ButtonName from stb").collect()
val bidrdd = sparkContext.parallelize(Bid)我怎样才能做到这一点?我尝试了这个链接(How to convert DataFrame to RDD in Scala?)中给出的方法,但是它对我不起作用。
val bidrdd1 = Bid.map(x => (x(0).toString, x(1).toString)).rdd它给出了一个错误value rdd is not a member of Array[(String, String)]
发布于 2017-06-17 18:03:09
您在这里创建的变量Bid是而不是a DataFrame,它是Array[Row],这就是为什么不能在其上使用.rdd的原因。如果您想获得一个RDD[Row],只需在DataFrame上调用.rdd (而不调用collect):
val rdd = spark.sql("select Distinct DeviceId, ButtonName from stb").rdd你的帖子包含了一些值得注意的误解:
..。ArrayRow格式的数据文件.
不完全是-- Array[Row]是将数据从DataFrame收集到驱动程序内存中的结果--它不是DataFrame。
..。我不想用它,因为它需要在一个系统中包含整个数据.
注意,一旦在collect上使用了DataFrame,就已经将整个数据收集到了单个JVM的内存中。因此,使用parallelize不是问题所在。
https://stackoverflow.com/questions/44607680
复制相似问题