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

我们如何计算输入数据的大小并将分区的数量提供给重新分区/合并?

曹昊焱
2023-03-14

示例-现在假设我们有一个输入RDD输入,它在第二步中被过滤。现在我想计算过滤后的RDD中的数据大小,并考虑到块大小为128MB,计算需要多少分区才能重新分区

这将帮助我将分区数传递给重新分区方法。

InputRDD=sc.textFile("sample.txt")
FilteredRDD=InputRDD.Filter( Some Filter Condition )
FilteredRDD.repartition(XX)

问题 1.如何计算XX的值?

SparkSQL /DataFrame有Q2.What类似的方法?

共有1个答案

郭业
2023-03-14

128MB的块大小只有在从/向HDFS读取 /writing数据时才会出现。一旦创建了RDD,数据就会在内存中,或者根据执行器的内存大小溢出到磁盘。

除非对筛选的 RDD 调用 collect() 操作,否则无法计算数据大小,因此不建议这样做。

最大分区大小为2GB,您可以根据集群大小或数据模型选择分区数。

 df.partition(col)
 类似资料:
  • 所以,我知道一般来说,在以下情况下应该使用 由于或其他可能导致减少原始数据集(RDD、DF)的操作,分区数量减少。对于在过滤大型数据集后更有效地运行操作很有用。 我也知道它比< code>repartition更便宜,因为它通过仅在必要时移动数据来减少洗牌。我的问题是如何定义< code>coalesce采用的参数(< code > idealpartionno )。我正在做一个项目,这个项目是另

  • 我有一个包含100个分区的df,在保存到HDFS之前,我想减少分区的数量,因为拼花文件太小了( 它可以工作,但将过程从每个文件 2-3 秒减慢到每个文件 10-20 秒。当我尝试重新分区时: 这个过程一点也不慢,每个文件2-3秒。 为什么?在减少分区数量时,合并不应该总是更快,因为它避免了完全洗牌吗? 背景: 我将文件从本地存储导入spark集群,并将生成的数据帧保存为拼花文件。每个文件大约100

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

  • 我对Spark相当陌生,所以也许我只是错过或误解了一些基本的东西。如有任何帮助,不胜感激。

  • 问题概要:假设我有300 GB的数据正在AWS中的EMR集群上用火花处理。这些数据有三个属性,用于在Hive中使用的文件系统上进行分区:日期、小时和(比方说)另一个。我想以最小化写入文件数量的方式将此数据写入fs。 我现在正在做的是获取日期、小时、另一个时间的不同组合,以及有多少行构成组合的计数。我将它们收集到驱动程序上的列表中,并遍历列表,为每个组合构建一个新的DataFrame,使用行数重新分

  • 我尝试使用Java8Lambda表达式和流来解析一些日志。我有一个巨大的日志文件,运行了一次又一次。我想把它分成不同的集合,每次运行一个集合。我不知道日志在advanced中运行了多少次。为了锻炼我非常虚弱的lambda肌肉,我想在列表中一次完成。 这是我目前的实现: 这里基本上类似于TomekRekawek的解决方案,但首先是未知的分区大小。