2016-03-14 4 views
0

Есть ли способ указать точность чисел с плавающей запятой в искре, желательно непосредственно перед записью RDD в файл, чтобы при вычислении точность не терялась?Как определить точность с плавающей запятой в искры apache?

Минимальный рабочий пример,

sqlCtxt = HiveContext(sc) 

    fulldata = sqlCtxt.jsonFile(DATA_FILE) 
    fulldata.registerTempTable("fulldata") 

    newcpulists = sqlCtxt.sql('SELECT xxx FROM fulldata') 


    def reduceSumPerc(x,y): 
      #some reducefunction 

    def mapfunc(x): 
      #some map function 

    reducedresult = newcpulists.map(mapfunc).reduceByKey(reduceSumPerc) 

    # I want to reduce the precision just at this line, before writing to file. 
    reducedresult.coalesce(1, True).saveAsTextFile(RESULT_PATH) 

ответ

2

Операция, как это не в рамках искру. Так saveAsTextFile просто называют unicode на не Юникода данных и .encode на unicode все, что вам нужно сделать, это формат вывода строк вручную с помощью standard Python formatting tools Например:

rdd = sc.parallelize([("foo", 0.123123132), ("bar", 0.00000001)]) 
rdd.map(lambda x: "{0}, {1:0.2f}".format(*x)).saveAsTextFile(...) 
+0

Хорошо. Спасибо за ответ. Итак, есть ли какие-либо предложения о том, как это сделать? Можно ли использовать функцию python? –

+1

Просто создайте выходную строку, как в предоставленном фрагменте. Параметры форматирования на Python должны быть более чем достаточно. – zero323

Смежные вопросы