将spark rdd保存到配置单元表

eeq64g8w  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(454)

在spark中,我想将rdd对象保存到hive表中。我正在尝试使用createdataframe,但这是抛出
线程“main”java.lang.nullpointerexception中出现异常

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

我使用的是spark 1.5版本。

gwbalxhn

gwbalxhn1#

如果您的产品是一个类(不是case类),我建议您在创建Dataframe之前将rdd转换为rdd[tuple]:

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")

相关问题