背景:我正在处理具有许多不同.csv/.txt
文件的临床数据。所有这些文件都是基于 PatientID 的,但是具有不同的字段。我将这些文件导入到DataFrames
中,在首先分别处理每个join
之后,我将在以后的阶段DataFrames
中导入这些文件。我在下面显示了两个DataFrames
(df_A
和df_B
)的示例。同样,我有多个DataFrames
-df_A
,df_B
,df_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>在多个partitioner
,DataFrames
上重新分配这些partitions
并不是一个好主意/ em>,以便我们在hashed
多shuffling
的情况下尽可能避免join()
?如果确实如此,那么我应该在 PatientID 的基础上进行重新分区,并对所有DataFrames
使用相同的partitioner
(不确定是否可行)吗?我还读过DataFrames
是自己完成的,但是我们不应该根据 PatientID 列指定DataFrame
吗?
如果有人能够提供一些有用的链接或线索,说明在处理所有多个hashing
,所有基于 PatientID 的DataFrames
时应该采用哪种优化策略,我将非常感激。