获取地图中的多列:rdd

kno*_*one 3 scala apache-spark rdd

我有一个 DF,我将其显式转换为 RDD 并尝试获取每列的记录。无法在地图中获取它们中的每一个。以下是我尝试过的:

val df = sql("Select col1, col2, col3, col4, col5 from tableName").rdd
Run Code Online (Sandbox Code Playgroud)

结果 df 成为以下成员org.apache.spark.rdd.RDD[org.apache.spark.sql.Row]

现在我尝试通过以下方式访问此 RDD 的每个元素:

val dfrdd = df.map{x => x.get(0); x.getAs[String](1); x.get(3)}
Run Code Online (Sandbox Code Playgroud)

问题是,上述语句仅返回 map 最后一次转换中存在的数据,即 上存在的数据x.get(3)。有人可以让我知道我做错了什么吗?

Sha*_*ala 5

最后一行始终从 返回map,在您的情况下x.get(3)会返回。

要返回多个值,您可以tuples按如下方式返回

val dfrdd = df.map{x => (x.get(0), x.getAs[String](1), x.get(3))}
Run Code Online (Sandbox Code Playgroud)

希望这有帮助!