2016-05-05 2 views
0

В искры я хочу сохранить объекты RDD для таблицы улей. Я пытаюсь использовать createDataFrame но бросаетСохранить Spark RDD to Hive Table

Exception in thread "main" java.lang.NullPointerException

val products=sc.parallelize(evaluatedProducts.toList); 
//here products are RDD[Product] 
val productdf = hiveContext.createDataFrame(products, classOf[Product]) 

Я использую искру версии 1.5.

ответ

7

Если ваш продукт является классом (не тот случай, класс), я предлагаю вам превратить ваш RDD в РДУ [кортежи] перед созданием DataFrame:

import org.apache.spark.sql.hive.HiveContext 

val hiveContext = new HiveContext(sc) 
import hiveContext.implicits._ 

val productDF = products 
    .map({p: Product => (p.getVal1, p.getVal2, ...)}) 
    .toDF("col1", "col2", ...) 

При таком подходе вы будете иметь атрибуты продукта как столбцы в DataFrame.

Затем вы можете создать временную таблицу с:

productDF.registerTempTable("table_name") 

или физической таблицы с:

productDF.write.saveAsTable("table_name") 
+0

Спасибо Daniel. Я попытался, как Вы предложили, но она возвращается сообщение об ошибке, как «значение toDF не является членом org.apache.spark.rdd.RDD» 'вал productdf = products.map ({р => (p.getcol1(), p.getCol2(), p.isValide())}) .DD ("col1", "col2", "col3"); ' –

+0

О, я забыл, вы должны вызвать' import hiveContext.implicits._ 'Я собираюсь добавить это к ответу. –

+0

Выполнено, как вы сказали, но он говорит, что hiveContext.implicits._ не найден. мне нужно добавить любой jar в файл pom уже после зависимости. есть в pom. ' org.apache.spark искровым hive_2.10 1.2.1 \t \t' –