具有相同键的两个(或更多)数据帧的工作人员行为
Worker Behavior with two (or more) dataframes having the same key
我在集群中使用 PySpark (Spark 1.4.1)。我有两个 DataFrame,每个都包含相同的键值,但其他字段的数据不同。
我使用密钥分别对每个DataFrame进行分区,并将一个parquet文件写入HDFS。然后我将 parquet 文件作为新的 DataFrame 读回内存。如果我加入两个 DataFrame,加入的处理会发生在同一个 worker 上吗?
例如:
dfA
包含由 userid
[=39 分区的 {userid
、firstname
、lastname
} =]
dfB
包含由 userid
[= 分区的 {userid
、activity
、job
、hobby
} 24=]
dfC = dfA.join(dfB, dfA.userid==dfB.userid)
dfC
是否已被 userid
分区?
Is dfC
already partitioned by userid
答案取决于您所说的分区是什么意思。具有相同 userid
的记录应位于同一分区,但 DataFrames
不支持理解为具有 Partitioner
的分区。只有 PairRDDs
(RDD[(T, U)]
) 可以在 Spark 中有分区器。这意味着对于大多数应用来说,答案是否定的。 DataFrame
或底层 RDD
均未分区。
您将在 Another question you can follow is 中找到有关 DataFrames
和分区的更多详细信息。
If I join the two DataFrames
, will the processing for the join happen on the same workers?
再一次,这取决于你的意思。在生成转换行之前,必须将具有相同 userid
的记录传输到同一节点。我问是否保证在没有任何网络流量的情况下发生,答案是否定的。
需要说明的是,即使 DataFrame
有一个分区器,它也会完全一样。数据协同分区不等同于数据协同定位。它只是意味着可以使用一对一映射而不是混洗来执行 join
操作。您可以在 Daniel Darbos' answer to .
中找到更多信息
我在集群中使用 PySpark (Spark 1.4.1)。我有两个 DataFrame,每个都包含相同的键值,但其他字段的数据不同。
我使用密钥分别对每个DataFrame进行分区,并将一个parquet文件写入HDFS。然后我将 parquet 文件作为新的 DataFrame 读回内存。如果我加入两个 DataFrame,加入的处理会发生在同一个 worker 上吗?
例如:
[=39 分区的 {dfA
包含由userid
userid
、firstname
、lastname
} =]dfB
包含由userid
[= 分区的 {userid
、activity
、job
、hobby
} 24=]
dfC = dfA.join(dfB, dfA.userid==dfB.userid)
dfC
是否已被 userid
分区?
Is
dfC
already partitioned byuserid
答案取决于您所说的分区是什么意思。具有相同 userid
的记录应位于同一分区,但 DataFrames
不支持理解为具有 Partitioner
的分区。只有 PairRDDs
(RDD[(T, U)]
) 可以在 Spark 中有分区器。这意味着对于大多数应用来说,答案是否定的。 DataFrame
或底层 RDD
均未分区。
您将在 DataFrames
和分区的更多详细信息。
If I join the two
DataFrames
, will the processing for the join happen on the same workers?
再一次,这取决于你的意思。在生成转换行之前,必须将具有相同 userid
的记录传输到同一节点。我问是否保证在没有任何网络流量的情况下发生,答案是否定的。
需要说明的是,即使 DataFrame
有一个分区器,它也会完全一样。数据协同分区不等同于数据协同定位。它只是意味着可以使用一对一映射而不是混洗来执行 join
操作。您可以在 Daniel Darbos' answer to