【发布时间】:2016-11-16 10:14:12
【问题描述】:
我有一个 8 节点集群,我从 jdbc 源加载两个数据帧,如下所示:
positionsDf = spark.read.jdbc(
url=connStr,
table=positionsSQL,
column="PositionDate",
lowerBound=41275,
upperBound=42736,
numPartitions=128*3,
properties=props
)
positionsDF.cache()
varDatesDf = spark.read.jdbc(
url=connStr,
table=datesSQL,
column="PositionDate",
lowerBound=41275,
upperBound=42736,
numPartitions=128 * 3,
properties=props
)
varDatesDF.cache()
res = varDatesDf.join(positionsDf, on='PositionDate').count()
我可以从应用程序 UI 的存储选项卡中得知分区均匀分布在集群节点上。但是,我不知道它们是如何分布在节点上的。理想情况下,两个数据帧都将以这样一种方式分布,即连接始终位于节点本地,甚至更好地位于执行器本地。
换句话说,包含 PositionDate="01 Jan 2016" 记录的 PositionDF 数据帧分区是否与包含 PositionDate="01 Jan 2016" 记录的 varDatesDf 数据帧分区位于相同的执行程序内存空间中?他们会在同一个节点上吗?还是只是随机的?
有什么方法可以查看哪个节点上有哪些分区?
spark 是否以一种确定性的方式跨节点分配使用这样的列键创建的分区?它们会一直是本地节点/执行器吗?
【问题讨论】:
标签: apache-spark pyspark