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

加载parquet文件并保持相同数目的hdfs分区

齐建安
2023-03-14
hdfs dfs -du -s -h /df
5.1 G  15.3 G  /df
hdfs dfs -du -h /df
43.6 M  130.7 M  /df/pid=0
43.5 M  130.5 M  /df/pid=1
...
43.6 M  130.9 M  /df/pid=119
df = spark.read.parquet('df')
df.rdd.getNumPartitions()
60

HDFS设置:

'parquet.block.size'未设置。

sc._jsc.hadoopConfiguration().get('parquet.block.size')

不返回任何内容。

float(sc._jsc.hadoopConfiguration().get("dfs.blocksize"))/2**20
128
sc._jsc.hadoopConfiguration().setInt("parquet.block.size", 64*2**20)
sc._jsc.hadoopConfiguration().setInt("dfs.blocksize", 64*2**20)

我试图避免自己在加载后不得不在应用程序中重新分区。

是否有一种方法可以强制Spark用存储在HDFS上的相同数量的分区加载parquet文件?

共有1个答案

轩辕炎彬
2023-03-14

首先,我将从检查Spark如何将数据拆分到分区开始。默认情况下,它取决于数据和集群的性质和大小。本文将为您提供为什么将数据帧加载到60个分区的答案:

https://umbertogriffo.gitbooks.io/apache-spark-best-practices-and-tuning/content/sparksqlshufflepartitions_draft.html

总的来说,它的催化剂负责所有的优化(包括分区数量),所以除非确实有很好的理由进行自定义设置,否则我会让它完成它的工作。如果您使用的任何转换都是宽的,Spark无论如何都会洗牌数据。

 类似资料:
  • 我正在通过php脚本下载一个文件,除了一个丑陋的事实之外,一切都工作得很完美。下载的文件保持相同的url,并附有原始名称。如何在下载文件时保持相同的文件名?

  • 我使用布局管理器将此配置为: 我的具体情况是子项没有预定义的宽度。相反,我将它们的宽度设置为 然后我希望为每个项目提供1/3的可用空间。 到目前为止很好,但我希望,如果在最后一行只有1或2个项目显示,我想居中他们。 正如您在最后一行中看到的,这些项被拉到布局的边缘,父项的宽度在它们之间被分割。这是因为正如我所说的,它们的宽度不是预先确定的。 我所期望的是计算项目的宽度,因为它们显示为每行3个项目,

  • 我有一个csv文件中的100个URL列表。第一列中的每一行都有一个url。我想加载每个url并从每个url中提取一段数据。 目前,我可以使用beautifulsoup和以下代码手动加载单个页面,以获取“Type”并将其保存到csv文件中: 但是,如果我想从csv文件中获取url列表,然后用代码解析每个url,并将每个“类型”保存到新csv文件中的单独一行,我不知道从何处开始。有什么想法吗? 尝试以

  • 我正在尝试使用SparkStreaming将流数据存储到HDFS中,但它会继续在新文件中创建附加到一个文件或几个多个文件中 如果它一直创建n个文件,我觉得效率不会很高 代码 在我的pom中,我使用了各自的依赖项: 火花-core_2.11 火花-sql_2.11 火花-streaming_2.11 火花流-kafka-0-10_2.11

  • 我希望创建一个.tar。以下文件夹/目录结构的gz文件,同时保留相同的文件夹/目录 然而,我只能创建所有文件的. tar.gz,没有文件夹/目录结构。即:ParentDir.tar.gz 使用Compress目录中用户接受的答案tar.gzCommons Compress,我有以下代码: 有人可以建议,我如何修改当前代码以保留文件夹/目录结构,以创建.tar.gz文件。谢谢!