从 spark 直接调用 .hql 文件

Posted

技术标签:

【中文标题】从 spark 直接调用 .hql 文件【英文标题】:Calling .hql file direclty from spark 【发布时间】:2018-05-22 16:14:35 【问题描述】:

我试图运行如下所示的 hql 文件,但收到错误 noviablealtexception

val QUERY = fromFile(s"$SQLDIR/select_cust_info.hql").getLines.mkString
sqlContext.sql(s"$QUERY").show()

你能帮忙吗,如何运行它?

根据要求,select_cust_info.hql 应该是这样的


set hive.execution.engine=mr;
    --new records
    insert into cust_info_stage 
    select row_number () over () + $hiveconf:maxid as row_id , name, age, sex, country , upd_date, create_date
    from $hiveconf:table r
    left join  cust_dim d on id=uid
    where not  exists ( select 1 from cust_info c where c.id=r.id);

    --upd record 
    insert into cust_info_stage 
    select row_id , name, age, sex, country , upd_date, create_date
    from $hiveconf:table r
    inner join cust_info_stage on 
    left join  cust_dim d on id=uid
    where not  exists ( select 1 from cust_info c where c.id=r.id);
    !quit

上面的hql只是一个示例,我想从sqlContext中调用这样的hqls。

现在我要检查的下一个级别是,如果 .hqls 中定义了 hiveconf,如何在 sqlContext 中传递这些变量。

【问题讨论】:

你的总部怎么样?有cmets吗?哪条线抛出错误?请生成minimal reproducible example 供我们使用。谢谢。 How to execute .sql file in spark using python的可能重复 先生按要求添加,hql 可以很大,200 行等。 【参考方案1】:

您可以尝试以下代码在 pyspark v2+ 中运行 hql 文件

from pyspark.sql import SparkSession
from pyspark.sql import SQLContext
sc =SparkContext.getOrCreate()
sqlCtx = SQLContext(sc)
with open("/home/hadoop/test/abc.hql") as fr:
    query = fr.read()
    print(query)
    results = sqlCtx.sql(query)

【讨论】:

以上是关于从 spark 直接调用 .hql 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在spark中使用transform python udf执行hql脚本?

hive on spark hql 插入数据报错 Failed to create Spark client for Spark session Error code 30041

hive on spark hql 插入数据报错 Failed to create Spark client for Spark session Error code 30041

用于聚合的 Spark 数据集或数据框

Spark 将数据帧直接从 Hive 写入本地文件系统

将 RDD 的值作为变量传递给另一个 RDD - Spark #Pyspark [重复]