我有10个字段的数据集。我需要在这些DataFrame上执行RDD操作。是否可以执行诸如map
,flatMap
等的RDD操作。
这是我的示例代码:
df.select("COUNTY","VEHICLES").show();
这是我的dataframe
,我需要将此dataframe
转换为RDD
,并在此新RDD上运行一些RDD操作。
以下是我将数据帧转换为RDD的代码
RDD<Row> java = df.select("COUNTY","VEHICLES").rdd();
转换为RDD后,我无法看到RDD结果,我试过
java.collect();
java.take(10);
java.foreach();
在上述所有情况下,我都没有得到结果。
请帮帮我。
答案 0 :(得分:0)
val myRdd : RDD[String] = ds.rdd
查看Spark Api文档Dataset to RDD。lazy val
rdd: RDD[T]
在您的情况下,通过在调用.rdd
之后执行select来创建具有所选记录的Dataframe,它将把它转换为RDD
答案 1 :(得分:0)
对于Spark 1.6:
您无法看到结果,就像您将Dataframe
转换为RDD一样,它将其转换为RDD[Row]
因此当你尝试其中任何一个时:
java.collect();
java.take(10);
java.foreach();
这将导致Array[Row]
并且您无法获得结果。
<强>解决方案:强>
您可以将行转换为相应的值,并从中获取RDD
,如下所示:
val newDF=df.select("COUNTY","VEHICLES")
val resultantRDD=newDF.rdd.map{row=>
val county=row.getAs[String]("COUNTY")
val vehicles=row.getAs[String]("VEHICLES")
(county,vehicles)
}
现在,您可以应用foreach
和collect
函数来获取值。
P.S。:代码是用Scala编写的,但是你可以了解我想要做的事情的本质!
答案 2 :(得分:0)
从spark 2.0开始,您可以使用toDS
函数将DataFrame转换为DataSet,以便使用RDD操作。
关于掌握spark 2.0
答案 3 :(得分:0)
Try persisting the rdd before reading the data from rdd.
val finalRdd = mbnfinal.rdd
finalRdd.cache()
finalRdd.count()