Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 删除数组中的重复项[字符串]_Scala_Apache Spark_Apache Spark Sql_User Defined Functions - Fatal编程技术网

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]]|
+--------------------+