我的问题是,当没有密钥时,Spark如何重新分区?我无法进一步深入源代码,以找到它通过Spark本身的位置。
def repartition(self, numPartitions, *cols):
"""
Returns a new :class:`DataFrame` partitioned by the given partitioning expressions. The
resulting DataFrame is hash partitioned.
:param numPartitions:
can be an int to specify the target number of partitions or a Column.
If it is a Column, it will be used as the first partitioning column. If not specified,
the default number of partitions is used.
.. versionchanged:: 1.6
Added optional arguments to specify the partitioning columns. Also made numPartitions
optional if partitioning columns are specified.
>>> df.repartition(10).rdd.getNumPartitions()
10
>>> data = df.union(df).repartition("age")
>>> data.show()
+---+-----+
|age| name|
+---+-----+
| 5| Bob|
| 5| Bob|
| 2|Alice|
| 2|Alice|
+---+-----+
>>> data = data.repartition(7, "age")
>>> data.show()
+---+-----+
|age| name|
+---+-----+
| 2|Alice|
| 5| Bob|
| 2|Alice|
| 5| Bob|
+---+-----+
>>> data.rdd.getNumPartitions()
7
"""
if isinstance(numPartitions, int):
if len(cols) == 0:
return DataFrame(self._jdf.repartition(numPartitions), self.sql_ctx)
else:
return DataFrame(
self._jdf.repartition(numPartitions, self._jcols(*cols)), self.sql_ctx)
elif isinstance(numPartitions, (basestring, Column)):
cols = (numPartitions, ) + cols
return DataFrame(self._jdf.repartition(self._jcols(*cols)), self.sql_ctx)
else:
raise TypeError("numPartitions should be an int or Column")
例如:调用这些行完全可以,但我不知道它实际上在做什么。是整行的散列吗?也许是DataFrame中的第一列?
df_2 = df_1\
.where(sf.col('some_column') == 1)\
.repartition(32)\
.alias('df_2')
默认情况下,如果没有指定分区器,则不是根据数据的特性进行分区,而是以随机的、均匀的方式在节点间进行分区。
df.repartition
后面的重新分区算法执行完整的数据洗牌,并在分区之间平均分配数据。为了减少洗牌,最好使用df.coalesce
以下是如何使用dataframe
https://medium.com/@mrpowers/management-spark-partitions-with-coalesce-and-repartition-4050C57AD5C4重新分区的一些很好的解释
问题内容: 例如,如果我打算对某些元素进行分区,则可以执行以下操作: 输出: 但是对我来说只是的一个子案例。尽管前者接受a 作为参数,而后者接受a ,但我只是将分区视为常规分组功能。 因此,相同的代码执行的操作完全相同: 这也导致。 那么,有什么理由我应该代替我吗?谢谢 问题答案: 会始终返回包含两个条目的映射,一个用于谓词为true的条目,另一个用于为false的条目。两个条目都有可能有空列表,
我开始研究@Michael Minella https://github.com/mminella/learningspringbatch/tree/master/src/remotePartitioning发布的模式 在他的例子中,他用: 和主人一起: 当试图将参数传递给JobLauncher时,我是否遗漏了任何设置?似乎Spring集成中缺少一个配置。 任何帮助/领导都是感激的。Thx,马库斯
在的情况下,将检索添加的元素。在的情况下,方法调用对所传递的字符串没有影响。JVM到底在做什么?有人能详细解释一下吗?
我有个任务,大概是: 我尝试了所有的方法,但仍然出现错误:/