Scala 删除数组中的重复项[字符串]
我有一个Scala 删除数组中的重复项[字符串],scala,apache-spark,apache-spark-sql,user-defined-functions,Scala,Apache Spark,Apache Spark Sql,User Defined Functions,我有一个dataframe列,其中array为string,如下所示。(键、值)对 我必须删除重复键的最小值,并得到结果。 我不想爆炸并去做。关键点应该是唯一的,并且根据最小值拾取关键点。在上面的列中,有三个键为1的对。所以应该选择(1,2),因为值2是(1,2)、(1,3)、(1,4)中的最小值 输出应为: 可乐 [(1,2)、(2,3)] 我创建了一个类似udf的 Val removeDup = udf((arr: Seq[String]) => { Arr.map(x=>x.s
dataframe
列,其中array
为string
,如下所示。(键、值)对
我必须删除重复键的最小值,并得到结果。
我不想爆炸并去做。关键点应该是唯一的,并且根据最小值拾取关键点。在上面的列中,有三个键为1的对。所以应该选择(1,2),因为值2是(1,2)、(1,3)、(1,4)中的最小值
输出应为:
可乐
[(1,2)、(2,3)]
我创建了一个类似udf的
Val removeDup = udf((arr: Seq[String]) => {
Arr.map(x=>x.split(","))}))
不能将
reduceby
键用作其dataframe
/dataset
好的,如果列if的类型是String
而不是Seq[String]
,那么下面的代码应该为您提供所需的内容:
df.select("v1","v2").groupby("v2").min("v2").show
val removeDup = udf((str: String) => {
str.split("\\(|\\)").filter(s => s != "," && s != "").map(s => {
val array = s.replace("(", "").replace(")", "").split(",")
(array(0), array(1))
})
.groupBy(_._1)
.mapValues(a => a.sortBy(_._2).head)
.values
.toSeq
.sortBy(_._1)
})
以你为例:
val df = spark.sparkContext.parallelize(Seq("(1,2),(1,3),(1,4),(2,3)").toDF("colA")
df.select(removeDup('colA)).show
这就产生了
+--------------------+
| UDF(colA)|
+--------------------+
| [[1,2], [2,3]]|
+--------------------+
如果您希望将列类型保持为
String
,则需要将.mkString(“,”
添加到udf
中。您能否清楚地说明输入数据帧列?它在数据帧中只有一列如何获得ColA(1,2)、(2,3)如果取最小值?用“更多”编辑explanation@Deek您能为您拥有的数据框提供示例输入数据吗?它是一个带有字符串数组的单列。这可能没用!
+--------------------+
| UDF(colA)|
+--------------------+
| [[1,2], [2,3]]|
+--------------------+