将重复值旋转到两个不同的列中

发布于 2025-01-26 10:46:07 字数 720 浏览 4 评论 0原文

我将以下数据导入到Pyspark数据框架中:

from pyspark.sql import SparkSession
from pyspark.sql.functions import *
from pyspark.sql.types import *
spark = SparkSession.builder.master("local[4]").appName("pyspark").getOrCreate()
df = spark.read.csv("example.csv")
df.show()

#+--+------+
#|id|answer|
#+--+------+
#| 1|a     |
#| 1|b     |
#| 2|c     |
#| 2|d     |
#| 3|e     |
#| 4|f     |
#| 4|g     |
#+--+------+

某些ID可能已经重复,有些ID可能不会。 我想拥有以下输出:

+--+------+------+
|id|first |second|
+--+------+------+
| 1|a     |b     |
| 2|c     |d     |
| 3|e     |Null  |
| 4|f     |g     |
+--+------+------+

I have the following data imported into PySpark dataframe:

from pyspark.sql import SparkSession
from pyspark.sql.functions import *
from pyspark.sql.types import *
spark = SparkSession.builder.master("local[4]").appName("pyspark").getOrCreate()
df = spark.read.csv("example.csv")
df.show()

#+--+------+
#|id|answer|
#+--+------+
#| 1|a     |
#| 1|b     |
#| 2|c     |
#| 2|d     |
#| 3|e     |
#| 4|f     |
#| 4|g     |
#+--+------+

Some id might have duplicated, some might not.
I would like to have the following output:

+--+------+------+
|id|first |second|
+--+------+------+
| 1|a     |b     |
| 2|c     |d     |
| 3|e     |Null  |
| 4|f     |g     |
+--+------+------+

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

何必那么矫情 2025-02-02 10:46:07

我将使用groupby并使用collect_list进行汇总。我添加了array_sort仅用于更多的确定性。

from pyspark.sql import functions as F

df = df.groupBy('id').agg(F.array_sort(F.collect_list('answer')).alias('list'))
df = df.select(
    'id',
    F.element_at('list', 1).alias('first'),
    F.element_at('list', 2).alias('second'),
)
df.show()
# +---+-----+------+
# | id|first|second|
# +---+-----+------+
# |  1|    a|     b|
# |  2|    c|     d|
# |  3|    e|  null|
# |  4|    f|     g|
# +---+-----+------+

I would use groupBy and aggregate using collect_list. I've added array_sort just for more determinism.

from pyspark.sql import functions as F

df = df.groupBy('id').agg(F.array_sort(F.collect_list('answer')).alias('list'))
df = df.select(
    'id',
    F.element_at('list', 1).alias('first'),
    F.element_at('list', 2).alias('second'),
)
df.show()
# +---+-----+------+
# | id|first|second|
# +---+-----+------+
# |  1|    a|     b|
# |  2|    c|     d|
# |  3|    e|  null|
# |  4|    f|     g|
# +---+-----+------+
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文