如何将 pyspark 数据帧子集化为 4 个数据帧?
How to subsetting pyspark dataframe in to 4 dataframes?
我有一个包含超过一百万条记录的 pyspark 数据框,我需要分成 4 个数据框。就像一个数据帧中的第一个 2.5 十万条记录,下一个数据帧中的下一个 2.5 十万条记录。我怎样才能做到这一点?
我认为最好的方法是通过索引列来做到这一点。
如果您没有,最简单的方法是使用 .zipWithIndex()
在 rdd 上创建一个
示例:
data = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
rdd = spark.sparkContext.parallelize(data).zipWithIndex()
那我们来创建一个DF:
from pyspark.sql.types import *
from pyspark.sql.functions import *
df = spark.createDataFrame(rdd, ['letters', 'id'])
计算尺寸:
size_of_df = df.count()/4
并创建部分 df:
df_part0 = df.where(col('id') < size_of_df)
df_part1 = df.where((col('id') > size_of_df) &
(col('id') <= 2*size_of_df))
df_part2 = df.where((col('id') > 2*size_of_df) &
(col('id') <= 3*size_of_df))
df_part3 = df.where((col('id') > 3*size_of_df) &
(col('id') <= 4*size_of_df))
我有一个包含超过一百万条记录的 pyspark 数据框,我需要分成 4 个数据框。就像一个数据帧中的第一个 2.5 十万条记录,下一个数据帧中的下一个 2.5 十万条记录。我怎样才能做到这一点?
我认为最好的方法是通过索引列来做到这一点。
如果您没有,最简单的方法是使用 .zipWithIndex()
示例:
data = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
rdd = spark.sparkContext.parallelize(data).zipWithIndex()
那我们来创建一个DF:
from pyspark.sql.types import *
from pyspark.sql.functions import *
df = spark.createDataFrame(rdd, ['letters', 'id'])
计算尺寸:
size_of_df = df.count()/4
并创建部分 df:
df_part0 = df.where(col('id') < size_of_df)
df_part1 = df.where((col('id') > size_of_df) &
(col('id') <= 2*size_of_df))
df_part2 = df.where((col('id') > 2*size_of_df) &
(col('id') <= 3*size_of_df))
df_part3 = df.where((col('id') > 3*size_of_df) &
(col('id') <= 4*size_of_df))