PySpark:对多个数据帧进行分区和哈希处理,然后加入

时间:2018-11-22 13:24:24

标签: python apache-spark hash pyspark hadoop-partitioning

背景:我正在处理具有许多不同.csv/.txt文件的临床数据。所有这些文件都是基于 PatientID 的,但是具有不同的字段。我将这些文件导入到DataFrames中,在首先分别处理每个join之后,我将在以后的阶段DataFrames中导入这些文件。我在下面显示了两个DataFramesdf_Adf_B)的示例。同样,我有多个DataFrames-df_Adf_Bdf_C...。df_J,我将{后期。

join

将所有这些df_A = spark.read.schema(schema).format("csv").load(...).... # Just an example df_A.show(3) #Example 1: +----------+-----------------+ | patientID| diagnosis_code| +----------+-----------------+ | A51| XIII| | B22| VI| | B13| XV| +----------+-----------------+ df_B.show(3) #Example 2: +-----------+----------+-------+-------------+--------+ | patientID| hospital| city| doctor_name| Bill| +-----------+----------+-------+-------------+--------+ | A51| Royal H| London|C.Braithwaite| 451.23| | B22|Surgery K.| Leeds| J.Small| 88.00| | B22|Surgery K.| Leeds| J.Small| 102.01| +-----------+----------+-------+-------------+--------+ print("Number of partitions: {}".format(df_A.rdd.getNumPartitions()))# Num of partitions: 1 print("Partitioner: {}".format(df_A.rdd.partitioner)) # Partitioner: None Number of partitions: 1 #With other DataFrames I get more partitions. Partitioner: None 文件读入.csv/.txt后,我可以看到对于某些DataFrames,数据仅分布在1个DataFrames上(如上),但是对于其他partition,则可能会有更多的分区,具体取决于相应的DataFrames文件的大小,进而影响所创建块的数量(.csv/.txt中128 MB的默认大小)。我们目前也没有HDFS

问题:现在,根据 PatientID << 1>在多个partitionerDataFrames上重新分配这些partitions并不是一个好主意/ em>,以便我们在hashedshuffling的情况下尽可能避免join()?如果确实如此,那么我应该在 PatientID 的基础上进行重新分区,并对所有DataFrames使用相同的partitioner(不确定是否可行)吗?我还读过DataFrames是自己完成的,但是我们不应该根据 PatientID 列指定DataFrame吗?

如果有人能够提供一些有用的链接或线索,说明在处理所有多个hashing,所有基于 PatientID DataFrames时应该采用哪种优化策略,我将非常感激。

0 个答案:

没有答案