Apache spark Spark 2.3是否改变了处理小文件的方式?
我刚开始玩Spark 2+2.3版本,在查看Spark UI时发现了一些奇怪的东西。 我在HDFS集群中有一个目录列表,总共包含24000个小文件 当我想对它们运行Spark操作时,Spark 1.5会为每个输入文件生成一个单独的任务,就像我以前使用的那样。我知道在我的例子中,每个HDFS块一个小文件就是一个块,在Spark中生成一个分区,每个分区由一个单独的任务处理 另外,命令my_dataframe.rdd.getNumPartitions输出24000 现在谈谈Spark 2.3 在同一输入上,命令my_dataframe.rdd.getNumPartitions输出1089。Spark UI还为我的Spark操作生成1089个任务。您还可以看到,spark 2.3中生成的作业数比1.5中的多 这两个Spark版本的代码都是相同的,我需要稍微更改一下数据帧、路径和列名,因为这是源于工作的代码: %皮斯帕克 dataframe=sqlContext\ 阅读\ 拼花地板到我的文件 dataframe.rdd.getNumPartitions 数据帧\ 其中COLCOL1==21379051&colcol2==2281643649&colcol3==229939942\ 选择col1、col2、col3\ show100,假 以下是由生成的物理计划Apache spark Spark 2.3是否改变了处理小文件的方式?,apache-spark,pyspark,bigdata,apache-spark-2.0,Apache Spark,Pyspark,Bigdata,Apache Spark 2.0,我刚开始玩Spark 2+2.3版本,在查看Spark UI时发现了一些奇怪的东西。 我在HDFS集群中有一个目录列表,总共包含24000个小文件 当我想对它们运行Spark操作时,Spark 1.5会为每个输入文件生成一个单独的任务,就像我以前使用的那样。我知道在我的例子中,每个HDFS块一个小文件就是一个块,在Spark中生成一个分区,每个分区由一个单独的任务处理 另外,命令my_dataframe.rdd.getNumPartitions输出24000 现在谈谈Spark 2.3 在同一输
dataframe.where(...).select(...).explain(True)
火花1.5
==实际计划==
过滤器col1=21379051&&col2=2281643649&&col3=229939942
扫描镶嵌[hdfs://cluster1ns/path_to_file][COL227、col229L、col330L]
代码生成:true
火花2.3
==实际计划==
*1项目[col10、col22L、col33L]
+-*1筛选器不是空的col10&&col10=21383478&&col2=2281643641&&col3=229979603
+-*1 FileScan拼花[col1,col2,col3]批处理:false,格式:拼花,位置:InMemoryFileIndex[hdfs://cluster1ns/path_to_file...,PartitionFilters:[],PushedFilters:[IsNotNullcol1],ReadSchema:struct。。。。
以上工作是由齐柏林飞艇使用pyspark生成的。
还有其他人在使用spark 2.3时遇到过这种情况吗?
我不得不说,我喜欢处理多个小文件的新方法,但我也想了解可能的内部火花变化
我在互联网上搜索了一本最新的书《星火权威指南》,但没有找到任何关于星火产生就业计划的新方法的信息
如果你有任何链接或信息,将是有趣的阅读。
谢谢!来自
|spark.files.maxPartitionBytes | 134217728 128 MB |读取文件时打包到单个分区中的最大字节数。您能提供作业代码吗?Hi@AddMeans,我在帖子上下文中添加了代码。谢谢!代码非常简单。您能为两个版本的spark运行dataframe.explainTrue来测试code转换为一组不同的操作?好主意,我在select生成的数据帧上运行explainTrue。我用一些代码混淆2.x再次添加了物理计划。因此,这说明了分区的数量。