如何在sparksql中生成累积连接

bq3bfh9z  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(176)

我对spark的输入如下:
col 2 col 2 col 2安装1035/3103201135/511180/-3103501710/100017170/-1000171774/314322171774/51717185/-3142
我想使用spark sql生成以下输出:
输出35/31032035/310320/35/535/310320/35/5/180/-3103500/10000/1000/0/-10000/1000/74/3143220/1000/0/-1000/74/314322/74/50/1000/0/-1000/74/314322/74/5/185/-3142
条件和程序:如果 col_1 以及 col_2 如果值不相同,则考虑新输出列的当前金额值,但两者相同,然后将以前的所有金额值串联 / .
i、 e.17从 col_1 哪里 col_1 & col_2 价值不同,所以考虑当前金额 0/1000 . 下一步,两个列的值相同,因此 0/1000/0/-1000 等等。需要为sparksql或sparkscala中的动态数据创建此逻辑。

ecfdbz9o

ecfdbz9o1#

你可以用 concat_ws 在一份从中获得的金额清单上 collect_list 在适当的窗口上:

import org.apache.spark.sql.expressions.Window

val df2 = df.withColumn(
    "output", 
    concat_ws(
        "/", 
        collect_list("amount").over(
            Window.partitionBy("col_1")
                  .orderBy("col_2")
                  .rowsBetween(Window.unboundedPreceding, 0)
        )
    )
)

相关问题