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