聚合后用蜂巢表读取和写入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了聚合后用蜂巢表读取和写入相关的知识,希望对你有一定的参考价值。

我们有一个蜂巢仓库,并希望使用spark来完成各种任务(主要是分类)。有时将结果写回蜂巢表。例如,我们编写了以下python函数来查找original_table第二列的总和,按原始列第一列分组。该函数有效,但我们担心它效率低下,特别是转换为键值对的映射和字典版本。函数combiner,mergeValue,mergeCombiner在别处定义,但工作正常。

from pyspark import HiveContext

rdd = HiveContext(sc).sql('from original_table select *')

#convert to key-value pairs
key_value_rdd = rdd.map(lambda x: (x[0], int(x[1])))

#create rdd where rows are (key, (sum, count)
combined = key_value_rdd.combineByKey(combiner, mergeValue, mergeCombiner)

# creates rdd with dictionary values in order to create schemardd
dict_rdd = combined.map(lambda x: {'k1': x[0], 'v1': x[1][0], 'v2': x[1][1]})

# infer the schema
schema_rdd = HiveContext(sc).inferSchema(dict_rdd)

# save
schema_rdd.saveAsTable('new_table_name')

是否有更有效的方法来做同样的事情?

答案

...当问题被写入时,这可能是不可能的,但现在(后1.3)使用createDataFrame()调用是否有意义?

获得第一个RDD之后,看起来你可以进行调用,然后对结构运行一个简单的SQL语句,以便在一次通过中完成整个工作。 (Sum和Grouping)另外,如果我正确地阅读API文档,DataFrame结构可以在创建时直接推断模式。

(Qazxswpoi)

另一答案

通过将hive.exec.scratchdir设置为用户有权访问的文件夹,可以解决此错误

另一答案

你正在使用什么版本的火花?

这个答案基于1.6并使用数据框。

http://spark.apache.org/docs/1.3.1/api/python/pyspark.sql.html#pyspark.sql.HiveContext

希望这可以帮助 !!

以上是关于聚合后用蜂巢表读取和写入的主要内容,如果未能解决你的问题,请参考以下文章

蜂巢 sql 聚合

从具有时间戳的镶木地板蜂巢表中读取火花

java基于NIO的分散读取文件,然后统一聚合后写入文件

从蜂巢桶读取记录的问题

从 BigQuery 读取数据并将其写入云存储上的 avro 文件格式

如何从 C++ 读取和写入嵌套的 lua 表?