我在集群模式下运行spark并通过JDBC从RDBMS读取数据.
根据Spark 文档,这些分区参数描述了在从多个worker并行读取时如何对表进行分区:
partitionColumnlowerBoundupperBoundnumPartitions这些是可选参数.
如果我不指定这些,会发生什么:
我想问一下,在使用Hadoop/MapReduce和Spark时,数据分区有什么显着差异吗?它们都在HDFS(TextInputFormat)上工作,所以它在理论上应该是相同的.
是否有任何数据分区程序可能不同的情况?任何见解对我的学习都非常有帮助.
谢谢
任何人都可以解释将为Spark Dataframe创建的分区数量.
我知道对于RDD,在创建它时我们可以提到下面的分区数量.
val RDD1 = sc.textFile("path" , 6)
Run Code Online (Sandbox Code Playgroud)
但是对于Spark数据帧,在创建时看起来我们没有选择指定像RDD那样的分区数.
我认为只有在创建数据框架后我们可以使用重新分区API.
df.repartition(4)
Run Code Online (Sandbox Code Playgroud)
因此,如果我们可以在创建数据帧时指定分区数量,请告诉我们.
试图了解 Hive 分区与 Spark 分区的关系,最终解决了一个关于连接的问题。
我有 2 个外部 Hive 表;均由 S3 存储桶支持并由 分区date;所以在每个存储桶中都有名称为 format 的键date=<yyyy-MM-dd>/<filename>。
问题 1:
如果我将此数据读入 Spark:
val table1 = spark.table("table1").as[Table1Row]
val table2 = spark.table("table2").as[Table2Row]
Run Code Online (Sandbox Code Playgroud)
那么结果数据集将分别有多少个分区?分区等于 S3 中的对象数量?
问题2:
假设这两种行类型具有以下架构:
Table1Row(date: Date, id: String, ...)
Table2Row(date: Date, id: String, ...)
Run Code Online (Sandbox Code Playgroud)
并且我想加入table1和table2在领域date和id:
table1.joinWith(table2,
table1("date") === table2("date") &&
table1("id") === table2("id")
)
Run Code Online (Sandbox Code Playgroud)
Spark 是否能够利用被连接的字段之一是 Hive 表中的分区键来优化连接?如果是这样怎么办?
问题 3:
假设现在我正在使用RDDs 代替:
val rdd1 = table1.rdd …Run Code Online (Sandbox Code Playgroud)