使用字符串操作合并 pyspark 中的行
Coalescing rows in pyspark with string operation
我希望从中合并 pyspark 数据帧的重复行:
对此:
我需要在合并行的每个句子后加一个句点。我尝试了 coalesce() 和 collect_set() 但无法在收集的 window/group 中执行字符串操作。
您可以将 concat_ws
与 collect_list
一起使用。
虽然,这不能保证句子的顺序,因为 Spark table 是无序的。如果你关心顺序,你需要一些顺序列来排序。
(df.groupBy('ID')
.agg(*[F.col(x).alias(x) for x in ['fname', 'lname', 'Score']],
F.concat_ws(' ', F.collect_list(F.col('Activity'))).alias('Activity'))
)
另一种方式:
df= (df2.groupby('ID','fname','lname','Score').agg(collect_list('Activity').alias('Activity'))#Create an array of Activity
.withColumn('Activity', concat(array_join('Activity','.'),lit('.')))#join array and then concatenate dot
).show(truncate=False)
我希望从中合并 pyspark 数据帧的重复行:
对此:
我需要在合并行的每个句子后加一个句点。我尝试了 coalesce() 和 collect_set() 但无法在收集的 window/group 中执行字符串操作。
您可以将 concat_ws
与 collect_list
一起使用。
虽然,这不能保证句子的顺序,因为 Spark table 是无序的。如果你关心顺序,你需要一些顺序列来排序。
(df.groupBy('ID')
.agg(*[F.col(x).alias(x) for x in ['fname', 'lname', 'Score']],
F.concat_ws(' ', F.collect_list(F.col('Activity'))).alias('Activity'))
)
另一种方式:
df= (df2.groupby('ID','fname','lname','Score').agg(collect_list('Activity').alias('Activity'))#Create an array of Activity
.withColumn('Activity', concat(array_join('Activity','.'),lit('.')))#join array and then concatenate dot
).show(truncate=False)