【发布时间】:2016-05-18 05:04:40
【问题描述】:
这似乎是一个非常幼稚的问题,但我在任何地方都找不到直接的答案。
我正在使用 Spark RDD 将一个非常大的 TSV 文件转换为两组键值对,以加载到分布式键值存储中。我没有使用 DataFrames,因为 TSV 没有遵循非常明确的架构,而稀疏矩阵是更好的模型。
一组键值对表示Entity-Attribute-Value 模型中的原始数据,另一组将第一组中的键和值转换为属性-值-实体模型(?)我猜-我刚刚做了那个期限。
我的伪代码大致是,
val orig: RDD[String] = sc.textFile("hdfs:///some-file.tsv").cache
val entityAttrPairs = orig.mapPartitions(convertLinesToKVPairs)
val attrEntityPairs = orig.mapPartitions(convertLinesToIndexKVPairs)
entityAttrPairs.saveAsNewAPIHadoopFile("hdfs:///ready-for-ingest/entity-attr")
attrEntityPairs.saveAsNewAPIHadoopFile("hdfs:///ready-for-ingest/attr-entity")
我的问题是:对 mapPartitions 的单独调用会导致 Spark 对整个 RDD 进行两次迭代吗? 尝试同时生成实体-属性和属性-实体对会更好吗?一次通过 RDD,即使它会使代码的可读性大大降低?
【问题讨论】:
标签: scala apache-spark rdd