如何将pyspark数据框分为4个数据框?

问题描述:

我有一个包含超过100万条记录的pyspark数据框,我需要将子集分为4个数据库。像第一个2.5十万个记录到一个数据帧和接下来的2.5十万个记录到下一个数据帧。我怎样才能做到这一点?如何将pyspark数据框分为4个数据框?

我认为最好的方法是通过索引列来完成。 如果你没有一个,最简单的方法是用创造一个在RDD .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))