如何将Array [Row]转换为RDD [Row]

时间:2017-06-17 17:55:50

标签: scala apache-spark

我有一个场景,我想将格式为Array [Row]的数据帧的结果转换为RDD [Row]。我尝试过使用parallelize,但我不想使用它,因为它需要在单个系统中包含整个数据,这在生产箱中是不可行的。

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)]

1 个答案:

答案 0 :(得分:2)

您在此处创建的变量Bid 一个DataFrame,它是Array[Row],这就是您无法使用.rdd的原因它。如果您想获得RDD[Row],只需在DataFrame上调用.rdd(无需调用collect):

val rdd = spark.sql("select Distinct DeviceId, ButtonName  from stb").rdd

您的帖子包含一些值得注意的误解:

  

......数据框格式为Array [Row] ...

不完全 - Array[Row]从DataFrame收集数据到驱动程序内存的结果 - 它不是DataFrame。

  

...我不想使用它,因为它需要在一个系统中包含整个数据......

请注意,只要在DataFrame上使用collect,就已经将整个数据收集到单个JVM的内存中。因此,使用parallelize不是问题。