pyspark 按列将数据帧拆分为几个数据帧

Posted

技术标签:

【中文标题】pyspark 按列将数据帧拆分为几个数据帧【英文标题】:pyspark split data frame into few data frames by column 【发布时间】:2016-12-23 14:29:53 【问题描述】:

我正在使用 Python (pyspark)

我有一个包含少数用户数据的数据框

IMSI   X        Y

1      139620   179284

1      139620   179284

3      138620   178284

3      138620   178284

3      138620   178284

我想创建由 IMSI 列拆分的 RDD-DF 对象

这样我就可以为每个 DF 操作一个 Python 函数

SplitDF.map(PythonFunctionForEachUser)

【问题讨论】:

【参考方案1】:

您可以使用两种方法。如果你想对 RDD 进行操作可以使用groupByKey:

df.rdd.keyBy(lambda r: r.IMSI).groupByKey().map(lambda a: PythonFunctionForEachUser(a[1]))

如果您更喜欢 Dataframes,您可以按 IMSI 列分组,然后按 collect_list,但首先您需要将这些 x 和 y 合并为一列:

>>> from pyspark.sql.functions import array
>>> df.withColumn('data', array('x', 'y')).groupBy('IMSI') \
         .agg(collect_list('data').alias('userdata')) \
         .rdd.map(PythonFunctionForEachUser)

【讨论】:

以上是关于pyspark 按列将数据帧拆分为几个数据帧的主要内容,如果未能解决你的问题,请参考以下文章

熊猫如何按间隔按列拆分数据帧

当 ID 匹配时,在其他 Pyspark 数据帧中按列划分 Pyspark 数据帧列

如何在限制行数的同时拆分 Pyspark 数据帧?

Pyspark 数据帧拆分并将分隔列值填充到 N 索引数组中

将数据帧拆分为单独的并应用公式以计算R中各段的过渡

Pyspark - 将数据帧写入 2 个不同的 csv 文件