如何在Scala中将DataFrame转换为RDD?

46

请问有人可以分享如何将dataframe转换为RDD吗?

3个回答

72

简单来说:

val rows: RDD[Row] = df.rdd

4
如果你在 RDD 或 Row 中遇到了 "type not found" 的问题,可以尝试使用以下代码:val rows: org.apache.spark.rdd.RDD[org.apache.spark.sql.Row] = df.rdd。这段代码可以将 DataFrame 转换为 RDD 并显式声明 Row 类型。 - Boern
1
为了扩展Boern的答案,请添加以下两个导入命令:import org.apache.spark.rdd.RDD import org.apache.spark.sql.Row - Ravi
1
这会改变Spark内存中保存数据的情况吗,还是只是创建一个指向相同数据的新对象?我希望是后者,但从源代码注释中不确定。 - matanster

3

我正在寻找我的答案,偶然发现了这篇帖子。

Jean的回答绝对正确,补充一点:"df.rdd"将返回RDD [Rows]。我需要在得到RDD之后应用split()。为此,我们需要将RDD [Row}转换为RDD [String]。

val opt=spark.sql("select tags from cvs").map(x=>x.toString()).rdd

3

如果您想将行映射到不同的RDD元素,请使用df.map(row => ...)将数据框转换为RDD。例如:

df.map(row => (row(1), row(2)))

该函数会给你一个成对的RDD,其中df的第一列是键,第二列是值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接