pyspark列合併為一行

2021-10-06 14:16:39 字數 1944 閱讀 7392

dataframe利用pyspark列合併為一行,類似於sqlgroup_concat函式。例如如下dataframe:

+----+---+

| s| d|

+----+---+

|abcd|123|

| asd|123|

+----+---+

需要按照列相同的列ds合併,想要的結果為:

+---+-----------+

| d| newcol|

+---+-----------+

|123|[abcd, xyz]|

+---+-----------+

code: 

from pyspark.sql import sparksession

from pyspark.sql.functions import concat_ws

from pyspark.sql.functions import collect_list

# 初始化spark會話

spark = sparksession \

.builder \

.master("local") \

.getorcreate()

df = spark.createdataframe([('abcd','123'),('xyz','123')], ['s', 'd'])

df.show()

df.groupby("d").agg(collect_list('s').alias('newcol')).show()

結果: 

+---+-----------+

| d| newcol|

+---+-----------+

|123|[abcd, xyz]|

+---+-----------+

如果想要字元拼接的形式,可以採用如下方法:

利用groupby去實現就好,spark裡面可以用concat_ws實現,可以看這個 spark中sql列合併為一行,而這裡的concat_ws合併缺很奇怪,官方文件的例項為:

>>> df = spark.createdataframe([('abcd','123')], ['s', 'd'])

>>> df.select(concat_ws('-', df.s, df.d).alias('s')).collect()

[row(s=u'abcd-123')]

from pyspark.sql import sparksession

from pyspark.sql.functions import concat_ws

# 初始化spark會話

spark = sparksession \

.builder \

.master("local") \

.getorcreate()

df = spark.createdataframe([('abcd','123'),('xyz','123')], ['s', 'd'])

df.show()

df.select(concat_ws('-', df.s, df.d).alias('newcol')).show()

結果: 

+--------+

| newcol|

+--------+

|abcd-123|

| xyz-123|

+--------+

SQLserver 多行合併為一行

將表和插入模擬資料 create table test id int course varchar 255 insert into test values 1,語文 insert into test values 2,數學 insert into test values 3,英語 insert in...

MySQL多行結果合併為一行

在做乙個專案的使用者列表的時候,需要將乙個使用者的多輛車放在一行顯示,但是普通查詢出來的結果是 array 0 array id 29 user id 1 car no 234567 1 array id 21 user id 1 car no 23565 2 array id 23 user id...

T SQL 將一列多行資料合併為一行

sql server在進行資料遷移 和報表處理的時候會遇到將一列多行資料拼接為乙個字串的情況,為了處理這個問題,在網上找了一些相關的資料,提供兩種方法,供遇到類似問題的朋友們參考,也藉此加深自己的印象。table sc student course 張三大學語文 李四大學語文 張三書法鑑賞 張三 欣...