gpt4 book ai didi

scala:处理元组,其中元组的第二个元素是字符串数组

转载 作者:行者123 更新时间:2023-12-02 13:27:01 25 4
gpt4 key购买 nike

我有一个rdd,RDD的结构如下:

org.apache.spark.rdd.RDD[(String, Array[String])] = MappedRDD[40] at map at <console>:14

这里是 x.take(1) 看起来像:

Array[(String, Array[String])] = Array((8239427349237423,Array(122641|2|2|1|1421990315711|38|6487985623452037|684|, 1229|2|1|1|1411349089424|87|462966136107937|1568|.....))

对于数组中的每个字符串,我想用“|”分隔并获取第 6 个项目并将其与元组的第一个元素一起返回,如下所示:

8239427349237423-6487985623452037
8239427349237423-4629661361079371

我开始如下:

  def getValues(lines: Array[String]) {
for(line <- lines) {
line.split("|")(6)
}

我还尝试了以下方法:

val b= x.map(a => (a._1, a._2.flatMap(y => y.split("|")(6))))

但这最终给了我以下结果:

Array[(String, Array[Char])] = Array((8239427349237423,Array(1, 2, 4, |, 9, |, 4, 1, 7, 6, |, 2, 9, 2, 7, 2, |, 7, |,....)))

最佳答案

如果您想对整个x执行此操作,您可以使用flatMap:

def getValues(x: Array[(String, Array[String])]) =
x flatMap (line => line._2 map (line._1 + "-" + _.split("\\|")(6)))

或者,也许更清楚一点,使用 for-compression:

def getValues(x: Array[(String, Array[String])]) = 
for {
(fst, snd) <- x
line <- snd
} yield fst + "-" + line.split("\\|")(6)

您必须使用 "\\|" 参数调用 split,因为它需要一个正则表达式,而 | 是一个特殊符号,因此你需要逃避它。 (编辑:或者您可以使用'|'(Char),按照@BenReich的建议)

要回答您的评论,您可以修改 getValues 以从 x 获取单个元素作为参数:

def getValues(item: (String, Array[String])) =
item._2 map (item._1 + "-" + _.split('|')(6))

然后用

调用它
x flatMap getValues

关于scala:处理元组,其中元组的第二个元素是字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29243618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com