Arrays 如何在scala中的另一个数组中使用数组,以便使用一个数组中的每个元素附加到另一个数组中的相应元素?

Arrays 如何在scala中的另一个数组中使用数组,以便使用一个数组中的每个元素附加到另一个数组中的相应元素?,arrays,scala,apache-spark,nested-loops,scala-collections,Arrays,Scala,Apache Spark,Nested Loops,Scala Collections,第一个阵列: var keyColumns=“A,B”。拆分(“,”) 第二个阵列: var colValues=DataFrameTest.select(“Y”,“Z”).collect.map(row=>row.toString) colValues:Array[String]=数组([1,2],[3,4],[5,6]) 我想要的结果是: 数组([A=1,B=2],[A=3,B=4],[A=5,B=6]) 这样以后我就可以迭代这个数组,创建where子句,比如 哪里 (A=1和B=2)或(A

第一个阵列: var keyColumns=“A,B”。拆分(“,”)

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

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

这样以后我就可以迭代这个数组,创建where子句,比如 哪里
(A=1和B=2)或(A=3和B=4)或(A=5和B=6)

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

scala>val keyColumns=“A,B”。拆分(“,”)
keyColumns:Array[String]=数组(A,B)
scala>val colValues=“[1,2][3,4][5,6]”。拆分(“”)
colValues:Array[String]=数组([1,2],[3,4],[5,6])
scala>val pattern=“”^\[(.{1}),(.{1})\]$”。r//这里,(.{1})确定一个正则表达式组,该正则表达式组正好包含1个字符
模式:scala.util.matching.Regex=^\[(.{1}),(.{1})\]$
scala>colValues.map{e=>pattern.findFirstMatchIn(e).map{m=>s“(${keyColumns(0)}=${m.group(1)}和${keyColumns(1)}=${m.group(2)})”}.getOrElse(e)}.mkString(“OR”)
res0:String=(A=1和B=2)或(A=3和B=4)或(A=5和B=6)

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

那么,类似这样的方法应该会起作用:

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

您可能会发现,在REPL中一步一步地运行此命令并查看每一行的作用是很有帮助的。

“({1})确定一个正则表达式组,该组正好包含1个任意字符”--如果您需要组,也可以使用
:D或
(.)
。谢谢您的回复和代码片段。它有帮助,但是.join不起作用,'value join不是Seq[String]的成员',我尝试使用如下map代替join.map{u.map{e=>e.split(“,”).mkString(“AND”)}它不会抛出任何错误,但不会执行任何操作。当在类似字符串上显式尝试时,它会工作,但不会在链式转换中工作。啊,对不起…
mksString
,而不是
join
…我总是混淆不同语言之间的差异:)我将更新答案。