【Pyspark】DataFrame存为hive表及hive表的查询方式

        使用Pyspark训练模型后,经常要将模型的训练结果输出为hive表,这篇博文就介绍如何将dataframe数据存为hive表。

        想把DataFrame数据存为hive数据,就需要用到HiveContext,下面看下如何使用:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from pyspark.sql import Row
from pyspark.ml.linalg import Vectors
import numpy as np
from pyspark.ml.classification import LogisticRegression
from pyspark.sql import SparkSession
from pyspark.sql import SQLContext
import os
from pyspark import SparkContext, SparkConf
from pyspark.sql import HiveContext
from pyspark.mllib.classification import LogisticRegressionWithLBFGS

#创建一个会话
spark = SparkSession \
    .builder \
    .master("yarn") \
    .appName('create_df_test2') \
    .enableHiveSupport() \
    .getOrCreate()

#输入要训练的数据
trainData = spark.sql("""select * from table""")
# 1.2 构造训练数据集
trainingSet = trainData.rdd.map(lambda x: Row(label=x[-1], features=Vectors.dense(x[:-1]))).toDF()

#训练数据
LR = LogisticRegression(labelCol='label', featuresCol="features")  # regParam=0.01,
LRModel = LR.fit(trainingSet)
coef = LRModel.coefficients

#得到训练结果
re = [(coef[0], coef[1], coef[2], LRModel.intercept)]

#将list转为dataframe
df_re = spark.createDataFrame([(float(tup[0]), float(tup[1]), float(tup[2]), float(tup[3])) for tup in re],
                              ['r1', 'r2', 'r3', 'r'])

#创建hive_text
hive_text = HiveContext(spark)
#将DataFrame数据转成table:registerDataFrameAsTable
rows_data = hive_text.registerDataFrameAsTable(df_re, tableName='testhive') #生成虚拟表,设置表名
data_2 = hive_text.sql("select * from table_tmp") #执行sql语句
print(data_2.take(2))
print(data_2.collect()[0])
#下面是第一次创建,table1还不存在因此用create
hive_text.sql('create table table1 select * from table_tmp')
#若表已经建好,存在,那么使用:
hive_text.sql('insert overwrite table table1 select * from table_tmp')
spark.stop()

看下中间的输出:

JOB运行成功后,就可以在查询平台上查询该表了:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值