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 基于列类型,在列的所有行上触发数据帧concat和/或sum_Scala_Dataframe_Apache Spark - Fatal编程技术网

Scala 基于列类型,在列的所有行上触发数据帧concat和/或sum

Scala 基于列类型,在列的所有行上触发数据帧concat和/或sum,scala,dataframe,apache-spark,Scala,Dataframe,Apache Spark,我试图在spark数据帧中找到一列的concat(如果它是string)和sum(如果它是int) 考虑下表 +-------+-----------+ | name| price | +-------+-----------+ | abc| 20 | | pqr| 2 | | uvw| 20 | +-------+-----------+ 我期待以下输出 +-------------------+---------

我试图在spark数据帧中找到一列的concat(如果它是string)和sum(如果它是int)

考虑下表

+-------+-----------+
|   name|  price    | 
+-------+-----------+
|    abc|   20      | 
|    pqr|    2      |
|    uvw|   20      |
+-------+-----------+
我期待以下输出

+-------------------+-----------+
|   name            |  price    | 
+-------------------+-----------+
|    abc-pqr-uvw    |   42      | 
+-------------------+-----------+

我尝试过聚合和其他函数,但由于没有要聚合的键列,所以无法应用本机spark函数。有人能帮我吗?

使用聚合功能
concat\ws(收集列表)
然后
sum(price)

(或)

df.
agg(concat_ws("-",collect_list(col("name"))).alias("name"),sum("price").alias("price")).
drop("1").
show()

//or using groupBy

df.groupBy(lit(1)).
agg(concat_ws("-",collect_list(col("name"))).alias("name"),sum("price").alias("price")).
drop("1").
show()
//+-----------+-----+
//|       name|price|
//+-----------+-----+
//|abc-pqr-uvw|   42|
//+-----------+-----+
groupBy
lit(1)
上使用
concat\ws(收集列表)
然后
求和(价格)

示例:

df.
agg(concat_ws("-",collect_list(col("name"))).alias("name"),sum("price").alias("price")).
drop("1").
show()

//or using groupBy

df.groupBy(lit(1)).
agg(concat_ws("-",collect_list(col("name"))).alias("name"),sum("price").alias("price")).
drop("1").
show()
//+-----------+-----+
//|       name|price|
//+-----------+-----+
//|abc-pqr-uvw|   42|
//+-----------+-----+

不需要按1分组,df.select(concat_ws(“-”),col_list(col(“name”))。alias(“name”)、sum(“price”)。alias(“price”)。show()应该可以