【发布时间】:2014-08-21 06:04:52
【问题描述】:
在使用 spark 处理数据后,我很难找到将数据保存到 HDFS 中的正确方法。
这就是我想要做的。我正在计算数值字段的最小值、最大值和 SD。我的输入文件有数百万行,但输出只有大约 15-20 个字段。因此,输出是每个字段的单个值(标量)。
例如:我将FIELD1的所有行加载到RDD中,最后,我将获得FIELD 1的3个单个值(MIN,MAX,SD)。我将这三个值连接成临时字符串。最后,我将有 15 到 20 行,包含以下格式的 4 列
FIELD_NAME_1 MIN MAX SD
FIELD_NAME_2 MIN MAX SD
这是一个sn-p的代码:
//create rdd
val data = sc.textFile("hdfs://x.x.x.x/"+args(1)).cache()
//just get the first column
val values = data.map(_.split(",",-1)(1))
val data_double= values.map(x=>if(x==""){0}else{x}.toDouble)
val min_value= data_double.map((_,1)).reduceByKey((_+_)).sortByKey(true).take(1)(0)._1
val max_value= data_double.map((_,1)).reduceByKey((_+_)).sortByKey(false).take(1)(0)._1
val SD = data_double.stdev
所以,我有 3 个变量,min_value、max_value 和 SD,我想将它们存储回 hdfs。
问题 1: 由于输出会相当小,我是否只是将其保存在服务器本地?或者我应该将它转储到 HDFS。在我看来,在本地转储文件更有意义。
问题 2: 在 Spark 中,我可以调用以下命令将 RDD 保存到文本文件中
some_RDD.saveAsTextFile("hdfs://namenode/path")
对于不是 scala 中的 RDD 的字符串变量,我如何完成同样的事情?我应该先将我的结果并行化为 RDD,然后调用 saveAsTextFile?
【问题讨论】:
标签: scala hadoop hdfs apache-spark