【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()

看下中间的输出:

【Pyspark】DataFrame存为hive表及hive表的查询方式_第1张图片

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

【Pyspark】DataFrame存为hive表及hive表的查询方式_第2张图片 

你可能感兴趣的:(Python小白的进阶之路)