hadoop - 将 Spark RDD 保存到 Hive 表

标签 hadoop apache-spark apache-spark-sql

在 spark 中,我想将 RDD 对象保存到配置单元表中。我正在尝试使用 createDataFrame 但这是抛出

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

我使用的是 Spark 1.5 版本。

最佳答案

如果您的 Product 是一个类(不是案例类),我建议您在创建 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", ...)

通过这种方法,您可以将 Product 属性作为 DataFrame 中的列。

然后你可以创建一个临时表:

productDF.registerTempTable("table_name")

或物理表:

productDF.write.saveAsTable("table_name")

关于hadoop - 将 Spark RDD 保存到 Hive 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37050828/

相关文章:

hadoop - 用hadoop实现工厂流水线结构

apache-spark - 在 Spark Streaming 中使用 updateStateByKey() 从原始事件流生成状态更改流

python - mapreduce的玩具示例

java - 为什么 Hadoop 映射器和缩减器采用类名而不是对象?

mongodb - 将 mongoDB 的所有集合作为输入传递给 mapreduce hadoop

python - 如何检查 Pyspark Dataframe 中列表是否存在交集

scala - Spark ElasticSearch配置-从Spark读取Elastic Search

apache-spark - 如何使用spark.sql将表列传递给rand函数?

scala - 如何将数据框拆分为具有相同列值的数据框?

apache-spark - 在 Spark SQL DSL 中计算字符串长度