Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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 在Spark聚合期间收集唯一元素 问题_Scala_Apache Spark_Append - Fatal编程技术网

Scala 在Spark聚合期间收集唯一元素 问题

Scala 在Spark聚合期间收集唯一元素 问题,scala,apache-spark,append,Scala,Apache Spark,Append,我需要在我的代码中更新这一行。我该怎么做 "case StringType => concat_ws(",",collect_list(col(c)))" 仅附加现有字段中不存在的字符串。在本例中,字母“b”不会出现两次 代码 您可能希望使用collect\u set()而不是collect\u list()。这将在收集过程中自动删除重复项 我不知道为什么要将唯一字符串数组转换为逗号分隔的列表。Spark可以很容易地处理数组列,并且它们的显示方式使每个元素都可以看到。不过,如果您必须将

我需要在我的代码中更新这一行。我该怎么做

"case StringType => concat_ws(",",collect_list(col(c)))" 
仅附加现有字段中不存在的字符串。在本例中,字母“b”不会出现两次

代码
您可能希望使用
collect\u set()
而不是
collect\u list()
。这将在收集过程中自动删除重复项


我不知道为什么要将唯一字符串数组转换为逗号分隔的列表。Spark可以很容易地处理数组列,并且它们的显示方式使每个元素都可以看到。不过,如果您必须将数组转换为逗号分隔的字符串,请在Spark 2.4+或Spark早期版本的UDF中使用。

我如何向代码“df.groupBy(“id”).agg(aggExprs.head,aggExprs.tail:908;”中添加一列,该列只给出作为组的元组的计数。(例如“按id,d从tbl组中选择id,d,COUNT()。非常感谢。
val df =Seq(
     (1, 1.0, true, "a"),
     (2, 2.0, false, "b")
     (3, 2.0, false, "b")
     (3, 2.0, false, "c")
).toDF("id","d","b","s")

val dataTypes: Map[String, DataType] = df.schema.map(sf => 
(sf.name,sf.dataType)).toMap

def genericAgg(c:String) = {
  dataTypes(c) match {
  case DoubleType => sum(col(c))
  case StringType => concat_ws(",",collect_list(col(c)))
  case BooleanType => max(col(c))
  }
}

val aggExprs: Seq[Column] = df.columns.filterNot(_=="id")
.map(c => genericAgg(c))

df
  .groupBy("id")
  .agg(
    aggExprs.head,aggExprs.tail:_*
  )
  .show()