从RDD元组中提取嵌套值

蓝色幽灵

已编辑。

我看起来有点生锈。

以下代码段:

import org.apache.spark.sql.functions.input_file_name

val inputPath: String = "/FileStore/tables/g1.txt" //does work
val rdd = spark.read.text(inputPath)
   .select(input_file_name, $"value")   
   .as[(String, String)]  
   .rdd
val rdd2 = rdd.map(line => (line._1, line._2.split(",")))

返回:

rdd2: org.apache.spark.rdd.RDD[(String, Array[String])] = MapPartitionsRDD[52] at map at command-2326393392121655:9
res13: Array[(String, Array[String])] = Array((dbfs:/FileStore/tables/g1.txt,Array(0, 5, 10)), (dbfs:/FileStore/tables/g1.txt,Array(202008, 5, 10)), (dbfs:/FileStore/tables/g1.txt,Array(202009, 10, 20)))

我想让数组的第二个元素保留在RDD域中。不知何故,做不到。

如下选择已转换为DF的方法,我可以毫无后顾之忧地获取Int值。但是我对RDD方法感兴趣。例如:

df.select($"value".getField("_2")).show(false)

正确返回:

5,5,10

但是,我无法通过RDD实现相同的功能。像:

val rddx = rddx-1.map(x => (x._2._2))

DF对于RDD最简单的方法是什么,感到好奇而好奇。

Gsquare

从您的要求中仅提取固定下面代码的数组的第二个元素:

import org.apache.spark.sql.functions.input_file_name

val inputPath: String = "/FileStore/tables/g1.txt" //does work
val rdd = spark.read.text(inputPath)
    .select(input_file_name, $"value")   
    .as[(String, String)]  
    .rdd
val rdd2 = rdd.map(line => (line._1, line._2.split(",").lift(1).getOrElse("0").toInt))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章