我有一个8节点群集和予加载从这样的JDBC源的两个dataframes:有没有办法控制集群中节点间火花分区的分布?
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”的记录的positionsDF dataframe分区是否与包含PositionDate =“01 Jan 2016”的记录的varDatesDf数据框分区位于同一执行器内存空间中?他们会在同一个节点上吗?或者它只是随机的?
有什么方法可以查看哪些节点在哪个节点上?
在整个节点上,火花是否以确定性的方式使用列键来创建分区?他们将始终是节点/执行器本地?