我需要使用Spark SQL从Hive表加载数据HiveContext并加载到HDFS中.默认情况下,DataFramefrom SQL输出有2个分区.为了获得更多的并行性,我需要更多的SQL分区.HiveContext中没有重载方法来获取分区数参数.
RDD的重新分区导致改组并导致更多的处理时间.
>
val result = sqlContext.sql("select * from bt_st_ent")
Run Code Online (Sandbox Code Playgroud)
有日志输出:
Starting task 0.0 in stage 131.0 (TID 297, aster1.com, partition 0,NODE_LOCAL, 2203 bytes)
Starting task 1.0 in stage 131.0 (TID 298, aster1.com, partition 1,NODE_LOCAL, 2204 bytes)
Run Code Online (Sandbox Code Playgroud)
我想知道有没有办法增加SQL输出的分区大小.
我glom()在RDD上遇到过这个方法.根据文档
返回通过将每个分区中的所有元素合并为数组而创建的RDD
是否会glom跨分区对数据进行混洗,还是仅将分区数据作为数组返回?在后一种情况下,我相信可以使用相同的方法来实现mapPartitions.
我还想知道是否有任何用例受益glom.
我正在努力深刻理解火花洗牌过程.当我开始阅读时,我遇到了以下几点.
Spark在完成时将Map任务(ShuffleMapTask)输出直接写入磁盘.
我想了解Hadoop MapReduce的以下内容.
如果Map-Reduce和Spark都将数据写入本地磁盘,那么spark shuffle进程与Hadoop MapReduce有何不同?
由于数据在Spark中表示为RDD,为什么这些输出不会保留在节点执行程序内存中?
Hadoop MapReduce和Spark的Map任务输出有何不同?
如果有很多小的中间文件作为输出,火花如何处理网络和I/O瓶颈?
我想了解接收器如何在Spark Streaming中工作.根据我的理解,将有一个接收器任务在执行器中运行,它们收集数据并保存为RDD.调用start()时,接收器开始读取.需要澄清以下内容.
想了解Spark Streaming和接收器的解剖结构.