【问题标题】:How to use an array inside another array in scala in order to use each element from one array to append to corresponding element from other array?如何在scala中的另一个数组中使用一个数组,以便使用一个数组中的每个元素附加到另一个数组中的相应元素?
【发布时间】:2021-07-04 14:13:23
【问题描述】:

第一个数组: var keyColumns = "A,B".split(",")

第二个数组: var colValues = DataFrameTest.select("Y","Z").collect.map(row => row.toString) colValues: Array[String]= Array([1,2],[3,4],[5,6])

我想要这样的结果: 数组([A=1,B=2],[A=3,B=4],[A=5,B=6])

这样以后我就可以遍历这个数组并创建我的 where 子句 在哪里 (A=1 AND B=2) OR (A=3 AND B=4) OR (A=5 AND B=6)

【问题讨论】:

    标签: arrays scala apache-spark nested-loops scala-collections


    【解决方案1】:

    首先,不要将结构化数据转换为字符串。在收集后执行.map(_.toSeq),而不是toString。

    然后,这样的事情应该可以工作:

       colValues
         .map { _ zip keyColumns } 
         .map { _.map { case (v,k) => s"$k=$v" } }
         .map { _.mkString("(", " AND ", ")") }
         .mkString(" OR ")
    

    您可能会发现在 REPL 中逐步运行此程序并查看每一行的作用很有帮助。

    【讨论】:

    • 感谢您的回复和代码sn-p。它有帮助,但 .join 不起作用,'value join 不是 Seq [String] 的成员' 我尝试使用 map 代替 join .map { _.map { e => e.split(",") .mkString(" AND ")} 它不会抛出任何错误,但它什么也没做。当在类似的字符串上显式尝试时,它可以工作,但不能在链式转换中。
    • 呃,对不起...mksString,不是join ...我总是在不同的语言之间混淆:)我会更新答案。
    【解决方案2】:

    你可以使用正则表达式,比如:

    scala> val keyColumns = "A,B".split(",")
    keyColumns: Array[String] = Array(A, B)
    
    scala> val colValues = "[1,2] [3,4] [5,6]".split(" ")
    colValues: Array[String] = Array([1,2], [3,4], [5,6])
    
    scala> val pattern = """^\[(.{1}),(.{1})\]$""".r //here, (.{1}) determines a regex group of exactly 1 any char
    pattern: scala.util.matching.Regex = ^\[(.{1}),(.{1})\]$
    
    scala> colValues.map { e => pattern.findFirstMatchIn(e).map { m => s"(${keyColumns(0)}=${m.group(1)} AND ${keyColumns(1)}=${m.group(2)})" }.getOrElse(e) }.mkString(" OR ")
    res0: String = (A=1 AND B=2) OR (A=3 AND B=4) OR (A=5 AND B=6)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-20
    • 2015-08-15
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多