À l'aide de la scala de vidage résultat traitées par une Étincelle dans HDFS

Je suis un peu confus pour trouver la bonne façon de sauvegarder des données dans HDFS après le traitement avec de l'étincelle.

C'est ce que je suis en train de faire. Je suis calcul du minimum, maximum et écart-type de champs numériques. Mes fichiers d'entrée ont des millions de lignes, mais la sortie a seulement environ 15-20 champs. Donc, la sortie est une valeur unique(scalaire) pour chaque champ.

Par exemple: je vais charger toutes les lignes de CHAMP1 dans un EDR, et à la fin, je vais avoir 3 valeurs pour le CHAMP 1(MIN, MAX, écart-type). J'ai concaténé ces trois valeurs dans la chaîne temporaire. En fin de compte, je vais avoir 15 à vingt lignes, contenant 4 colonnes dans ce format suivant

FIELD_NAME_1  MIN  MAX  SD
FIELD_NAME_2  MIN  MAX  SD

C'est un extrait du code:

//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

Donc, j'ai 3 variables, min_value, max_value et SD que je veux stocker retour à la sf.

La Question 1:
Depuis la sortie sera plutôt petite, dois-je l'enregistrer localement sur le serveur? ou devrais-je faire un dump de HDFS. Me semble que le dumping localement le fichier fait plus de sens.

La Question 2:
Dans spark, je peux juste appeler pour enregistrer un RDD dans un fichier texte

some_RDD.saveAsTextFile("hdfs://namenode/path")

Comment puis-je faire la même chose dans une variable de Chaîne qui n'est pas un RDD dans scala? dois-je paralléliser mon résultat dans un CA d'abord et ensuite appeler saveAsTextFile?

OriginalL'auteur user2773013 | 2014-06-30