gpt4 book ai didi

scala - 如何有效地从单个字符串列RDD中提取多个列?

转载 作者:行者123 更新时间:2023-12-02 05:16:00 24 4
gpt4 key购买 nike

我有一个包含20多个列的文件,我想从中提取一些。到目前为止,我有以下代码。我敢肯定有一种聪明的方法可以做到这一点,但无法使其成功运行。有任何想法吗?

mvnmdata的类型为RDD [String]

val strpcols = mvnmdata.map(x => x.split('|')).map(x => (x(0),x(1),x(5),x(6),x(7),x(8),x(9),x(10),x(11),x(12),x(13),x(14),x(15),x(16),x(17),x(18),x(19),x(20),x(21),x(22),x(23) ))```

最佳答案

如下所示,如果您不想编写重复的x(i),则可以循环处理。范例1:

val strpcols = mvnmdata.map(x => x.split('|'))
.map(x =>{
val xbuffer = new ArrayBuffer[String]()
for (i <- Array(0,1,5,6...)){
xbuffer.append(x(i))
}
xbuffer
})

如果只想用开始和结束以及要排除的数字定义索引列表,请参见下面的示例2:
scala> (1 to 10).toSet
res8: scala.collection.immutable.Set[Int] = Set(5, 10, 1, 6, 9, 2, 7, 3, 8, 4)

scala> ((1 to 10).toSet -- Set(2,9)).toArray.sortBy(row=>row)
res9: Array[Int] = Array(1, 3, 4, 5, 6, 7, 8, 10)

您想要的最终代码:
  //define the function to process indexes
def getSpecIndexes(start:Int, end:Int, removedValueSet:Set[Int]):Array[Int] = {
((start to end).toSet -- removedValueSet).toArray.sortBy(row=>row)
}

val strpcols = mvnmdata.map(x => x.split('|'))
.map(x =>{
val xbuffer = new ArrayBuffer[String]()
//call the function
for (i <- getSpecIndexes(0,100,Set(3,4,5,6))){
xbuffer.append(x(i))
}
xbuffer
})

关于scala - 如何有效地从单个字符串列RDD中提取多个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56147168/

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