当前位置: 首页 > 知识库问答 >
问题:

Apache Spark中数据分区的控制

冯祺
2023-03-14

输出应类似于:
[
{col1:row1,col2:row1:col3:row1:col4:row1},
{col1:row2,col2:row2:col3:row2:col4:row2},
{col1:row3,col2:row3:col3:row4:row3},
{col1:row4,col2:row4:row4},...
]

我尝试使用spark中可用的repartion(num),但它并不完全像我想要的那样分区。因此,生成的JSON数据是无效的。我不明白为什么我的html" target="_blank">程序处理数据要花同样的时间,尽管我使用了不同数量的核心,可以在这里找到,重新分区的建议是由@Patrick McGloin提出的。那个问题中提到的代码是我正在尝试做的事情。

共有1个答案

梅飞龙
2023-03-14

猜猜你需要的是PartitionBy。在Scala中,您可以为它提供自定义构建HashParitioner,而在Python中,您可以传递PartitionFunc。Scala中有很多例子,所以让我简要解释一下Python的风格。

partitionFunc需要一个元组,第一个元素是键。假设您以以下方式组织数据:(ROW_ID,(A,B,C,..))其中ROW_ID=[1,2,3,...,k]。您总是可以添加ROW_ID,然后删除它。

若要每两行获取一个新分区:

rdd.partitionBy(numPartitions = int(rdd.count() / 2),
                partitionFunc = lambda key: int(key / 2)
 类似资料:
  • Redisson 仅在集群模式中支持数据分区(分片)。 它使得可以使用整个 Redis 集群的内存而不是单个节点的内存来存储单个数据结构实例。 Redisson 默认将数据结构切分为 231 个槽。槽的数量可在 3 和 16834 之间。槽会一致地分布在所有的集群节点上。这意味着每个节点将包含近似相等数量的槽。如默认槽量(231) 和 4 个节点的情况,每个节点将包含接近 57 个数据分区,而对

  • 作为卡桑德拉数据分区的后续,我得到了vNodes的想法。感谢“西蒙·丰塔纳·奥斯卡森” 当我尝试使用vNodes进行数据分区时,我有几个问题, 我尝试观察2节点中的分区分布() 因此,根据我在两个节点中的观察,随着一个范围的扩展,节点61的值从-9207297847862311651到-9185516104965672922。。。 注意:分区范围从9039572936575206977到90199

  • 有人能解释一下将为Spark Dataframe创建的分区数量吗。 我知道对于RDD,在创建它时,我们可以提到如下分区的数量。 但是对于创建时的Spark数据帧,看起来我们没有像RDD那样指定分区数量的选项。 我认为唯一的可能性是,在创建数据帧后,我们可以使用重新分区API。 有人能告诉我在创建数据帧时,我们是否可以指定分区的数量。

  • 我正在用Kafka设计一个spark流媒体应用程序。我有以下几个问题:我正在将数据从RDBMS表流式传输到kafka,并使用Spark consumer来使用消息,并使用Spark-SQL进行处理 问题:1。我将数据从表中流式传输到kafka as(键作为表名,值作为JSON记录形式的表数据)——这是正确的体系结构吗? 这种数据库流的架构和设计是否正常,我如何解决转换问题中的转换? 你好Piyus

  • 我需要spark(scala)数据帧分区方面的帮助。我需要按一个键列划分成n个分区,与同一个键相关的所有行都应该在同一个分区中(即,键不应该分布在整个分区中) 注意:我的钥匙可能有几百万 例如:假设我有下面的数据框 等等等等 正如您所看到的,许多值共享相同的键。我想将此数据集划分为"n"个分区,其中相同的键应该在相同的分区中,并且键不应该分布在分区之间。多个键驾驶室位于同一分区,键不可排序。 提前

  • 我正在尝试创建一个spark应用程序,它对创建、读取、写入和更新MySQL数据非常有用。那么,有没有办法使用Spark创建一个MySQL表? 下面是在MySQL数据库中创建表的Scala JDBC代码。我怎样才能通过Spark做到这一点?