РЕДАКТИРОВАНИЕ.
Мне кажется, что он немного ржавый.
Следующий фрагмент:
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)))
Iхочу получить второй элемент массива, оставшийся в домене 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.