[英]How to execute hql script with transform python udf in spark?
我是通過 POC 激發和學習的新手。 作為此 POC 的一部分,我正在嘗試直接執行具有 transform 關鍵字的 hql 文件以使用 python udf。
我已經在 CLI "hive -f filename.hql" 中測試了 hql 腳本,它工作正常。 我在 spark-sql 中嘗試過的相同腳本,但由於找不到 hdfs path not found 錯誤而失敗。 我試圖以不同的方式提供 hdfs 路徑,如下所示,但都不起作用
"/test/scripts/test.hql"
"hdfs://test.net:8020/test/scripts/test.hql"
"hdfs:///test.net:8020/test/scripts/test.hql"
還嘗試在配置單元轉換代碼中給出完整路徑,如下所示
USING "scl enable python27 'python hdfs://test.net:8020/user/test/scripts/TestPython.py'"
蜂巢代碼
add file hdfs://test.net:8020/user/test/scripts/TestPython.py;
select * from
(select transform (*)
USING "scl enable python27 'python TestPython.py'"
as (Col_1 STRING,
col_2 STRING,
...
..
col_125 STRING
)
FROM
test.transform_inner_temp1 a) b;
測試Python代碼:
#!/usr/bin/env python
'''
Created on June 2, 2017
@author: test
'''
import sys
from datetime import datetime
import decimal
import string
D = decimal.Decimal
for line in sys.stdin:
line = sys.stdin.readline()
TempList = line.strip().split('\t')
col_1 = TempList[0]
...
....
col_125 = TempList[34] + TempList[32]
outList.extend((col_1,....col_125))
outValue = "\t".join(map(str,outList))
print "%s"%(outValue)
所以我嘗試了另一種方法,直接在 spark-submit 中執行
spark-submit --master yarn-cluster hdfs://test.net:8020/user/test/scripts/testspark.py
測試火花.py
from pyspark.sql.types import StringType
from pyspark import SparkConf, SparkContext
from pyspark import SQLContext
conf = SparkConf().setAppName("gveeran pyspark test")
sc = SparkContext(conf=conf)
sqlContext = SQLContext(sc)
with open("hdfs://test.net:8020/user/test/scripts/test.hql") as fr:
query = fr.read()
results = sqlContext.sql(query)
results.show()
但同樣的問題如下
Traceback (most recent call last):
File "PySparkTest2.py", line 7, in <module>
with open("hdfs://test.net:8020/user/test/scripts/test.hql") as fr:
IOError: [Errno 2] No such file or directory: 'hdfs://test.net:8020/user/test/scripts/test.hql'
您可以將文件作為查詢讀取,然后作為spark sql
作業執行
例子:-
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.