【问题标题】:how to iterate over array[string] in spark scala?如何在 spark scala 中迭代数组 [string]?
【发布时间】:2020-06-03 23:58:30
【问题描述】:

enter image description here这是我的示例输入:

val list=List("a;bc:de;f","uvw:xy;z","123:456")

我正在应用以下操作

val upper=list.map(x=>x.split(":")).map(x=>x.split(";"))

但它抛出错误- 错误:值拆分不是 Array[String] 的成员

任何人都可以帮助如何使用这两个拆分,以便我得到答案!

提前谢谢你。

【问题讨论】:

  • list.map(x=>x.split(":")) 会给你一个数组列表。然后,您尝试为数组上拆分的每个项目运行.map an。我想你想要val upper=list.map(x=>x.split(":").map(x=>x.split(";")))
  • 我必须迭代 val upper=list.map(x=>x.split(":")).map(x=>x.split(";"))

标签: scala dictionary split flatmap


【解决方案1】:

使用list.map(x=>x.split(":")) 会给你一个数组列表。

upper: List[Array[String]] = List(Array(a;bc, de;f), Array(uvw, xy;z), Array(123, 456))

之后映射,您可以看到该项目将是您尝试在其中运行拆分的数组。

您可以使用flatMap 代替,它会首先给您List(a;bc, de;f, uvw, xy;z, 123, 456),然后您可以在; 上拆分的那些项目上使用映射

val upper = list.flatMap(_.split(":")).map(_.split(";"))

输出

upper: List[Array[String]] = List(Array(a, bc), Array(de, f), Array(uvw), Array(xy, z), Array(123), Array(456))

【讨论】:

    【解决方案2】:

    您可以在一次地图迭代中使用带有多个分隔符的split

    val upper = list.map(x => x.split("[:;]"))
    
    //upper: List[Array[String]] = List(Array(a, bc, de, f), Array(uvw, xy, z), Array(123, 456))
    

    【讨论】:

      【解决方案3】:

      这是我尝试过并且有效的代码:

      val upper=list.map(x=>x.split(":")).map(x=>x.map(x=>x.split(";")))
      

      给出输出:

      upper: List[Array[Array[String]]] = List(Array(Array(a, bc), Array(de, f)), Array(Array(uvw), Array(xy, z)), Array(Array(123), Array(456)))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-01
        • 1970-01-01
        • 2017-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-06
        相关资源
        最近更新 更多