我想问一下,在使用Hadoop/MapReduce和Spark时,数据分区是否有任何显著差异?它们都使用HDFS(TextInputFormat),因此在理论上应该是相同的。
是否存在任何数据分区过程不同的情况?任何洞见都会对我的研究非常有帮助。
谢谢
是否存在任何数据分区过程不同的情况?任何洞见都会对我的研究非常有帮助。
谢谢
在使用Hadoop/mapreduce和Spark时,数据分区是否存在重大差异?
Spark支持所有的Hadoop I/O格式,因为它使用相同的Hadoop InputFormat API以及自己的格式化程序。所以,默认情况下,Spark输入分区的工作方式与Hadoop/MapReduce输入拆分相同。分区中的数据大小可以在运行时进行配置,并且它提供了转换函数,如repartition
、coalesce
和repartitionAndSortWithinPartition
,可以直接控制计算的分区数。
是否存在其数据分区过程不同的情况?
除了Hadoop I/O API之外,Spark还具有一些智能I/O格式(例如Databricks CSV和NoSQL DB Connectors),它们将直接返回DataSet/DateFrame
(RDD之上的更高级别的东西),这些是Spark特定的。
从非Hadoop源读取数据时,Spark分区的关键点
fs.s3n.block.size
或fs.s3.block.size
。spark.cassandra.input.split.size_in_mb
。spark.mongodb.input.partitionerOptions.partitionSizeMB
。max(sc.defaultParallelism, total_data_size / data_block_size)
。有时群集中可用核心数也会影响分区数,例如使用没有分区参数的sc.parallelize()
。阅读更多.. link1