如何在Pyspark中更改HDFS块大小?

4

我使用pySpark编写parquet文件。我想更改该文件的hdfs块大小。我像这样设置块大小,但它不起作用:

sc._jsc.hadoopConfiguration().set("dfs.block.size", "128m")

这个设置必须在启动pySpark作业之前进行吗?如果是,如何设置。


如果以下任何答案解决了您的问题,请考虑接受最佳答案或添加您自己的解决方案。这样,它可以向更广泛的社区表明您已经找到了解决方案。 - mrsrinivas
我不确定你能否更改它,这就是文件在HDFS中的写入方式。Spark将为每个文件分区(一种映射器)分配一个任务。这就是为什么很多人建议为Spark设置256m块的原因。 - Thomas Decaux
3个回答

2
尝试通过sc._jsc.hadoopConfiguration()并使用SparkContext进行设置。
from pyspark import SparkConf, SparkContext 
conf = (SparkConf().setMaster("yarn")) 
sc = SparkContext(conf = conf)
sc._jsc.hadoopConfiguration().set("dfs.block.size", "128m")
txt = sc.parallelize(("Hello", "world", "!"))
txt.saveAsTextFile("hdfs/output/path") #saving output with 128MB block size

在Scala中:

sc.hadoopConfiguration.set("dfs.block.size", "128m")

它不起作用。我正在使用pyspark版本1.6.2。 - Sean Nguyen

0

您可以设置Spark写入文件的块大小:

myDataFrame.write.option("parquet.block.size", 256 * 1024 * 1024).parquet(destinationPath)

0

我曾经遇到过类似的问题,但是我找到了解决方法。它需要一个数字而不是“128m”。因此,这应该可以解决问题(至少对我有效!):

block_size = str(1024 * 1024 * 128)
sc._jsc.hadoopConfiguration().set("dfs.block.size", block_size)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接