Apache spark 在spark驱动程序中处理配置单元记录

Apache spark 在spark驱动程序中处理配置单元记录,apache-spark,hive,Apache Spark,Hive,在我的用例中,我有一个包含100000条记录的配置单元表。每个记录代表一个必须处理的原始数据文件。处理每个原始数据文件会生成一个大小在10MB到500MB之间的csv文件。最终,这些csv文件将作为一个单独的过程填充到配置单元表中。在我的企业集群中,仍然不建议在hdfs中生成大量数据。因此,我更喜欢将这两个单独的过程合并到一个过程中,这样它们就可以处理,比如说,5000条记录乘以5000条记录 我的问题:- 假设我的rdd引用了整个配置单元表,那么如何对每5000条记录执行一个原始数据处理步骤?

在我的用例中,我有一个包含100000条记录的配置单元表。每个记录代表一个必须处理的原始数据文件。处理每个原始数据文件会生成一个大小在10MB到500MB之间的csv文件。最终,这些csv文件将作为一个单独的过程填充到配置单元表中。在我的企业集群中,仍然不建议在hdfs中生成大量数据。因此,我更喜欢将这两个单独的过程合并到一个过程中,这样它们就可以处理,比如说,5000条记录乘以5000条记录

我的问题:-


假设我的rdd引用了整个配置单元表,那么如何对每5000条记录执行一个原始数据处理步骤?类似于for循环,每次增加5000条记录,一种方法是使用RDD的滑动功能。您可以在ApacheSpark的mllib包中找到它。以下是您如何使用它。 假设我们有一个包含1000个元素的rdd

val rdd = sc.parallelize(1 to 1000)
import org.apache.spark.mllib.rdd._
val newRdd = RDDFunctions.fromRDD(rdd)

// sliding by 10 (instead use 5000 or what you need)
val rddSlidedBy10 = newRdd.sliding(10, 10)
结果将如下所示

Array(Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), Array(11, 12, 13, 14, 15, 16, 17, 18, 19, 20), Array(21, 22, 23, 24, 25, 26, 27, 28, 29, 30), Array(31, 32, 33, 34, 35, 36, 37, 38, 39, 40), Array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50), Array(51, 52, 53, 54, 55, 56, 57, 58, 59, 60), Array(61, 62, 63, 64, 65, 66, 67, 68, 69, 70), Array(71, 72, 73, 74, 75, 76, 77, 78, 79, 80)

您可以访问阵列上的foreach并将原始数据处理为CSV,谢谢。。这个方法似乎在spark 2.x.x中。不幸的是,对于这个用例,我需要使用spark 1.6.2。还有其他选择: