簡體   English   中英

通過hiveContext在Spark Job中使用Hive功能

[英]Using Hive functions in Spark Job via hiveContext

我正在使用Hive 1.2和Spark 1.4.1。 以下查詢通過Hive CLI完美運行:

hive> select row_number() over (partition by one.id order by two.id) as sk,
two.id, two.name, one.name, current_date() 
from avant_source.one one 
inner join avant_source.two two 
on one.id = two.one_id;

但是當我嘗試在pyspark作業中通過HiveContext使用它時,它給了我一個錯誤:

py4j.protocol.Py4JJavaError: An error occurred while calling o26.sql.
: java.lang.RuntimeException: Couldn't find function current_date

代碼段:

from pyspark import HiveContext

conf = SparkConf().setAppName('DFtest')
sc = SparkContext(conf=conf)
sqlContext = HiveContext(sc)

df = sqlContext.sql("select row_number() over (partition by one.id order by two.id) as sk, two.id, two.name, one.name, current_date() from avant_source.one one inner join avant_source.two two on one.id = two.one_id")

df.show()

sc.stop()

有沒有辦法在pyspark獲取當前日期或時間戳? 我嘗試導入日期,日期時間,但它總是拋出一個錯誤,說找不到函數。

我試圖在pyspark 1.5 Sandbox中的數據框架中使用current_date,但是我也得到了一個不同的錯誤。

df = sqlContext.createDataFrame([(current_date,)],[‘d’])
df.select(date_sub(df.d,1).alias('d')).collect()

錯誤:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/mapr/spark/spark-1.5.2/python/pyspark/sql/dataframe.py", line 769, in select
    jdf = self._jdf.select(self._jcols(*cols))
  File "/opt/mapr/spark/spark-1.5.2/python/lib/py4j-0.8.2.1-src.zip/py4j/java_gateway.py", line 538, in __call__
  File "/opt/mapr/spark/spark-1.5.2/python/pyspark/sql/utils.py", line 40, in deco
    raise AnalysisException(s.split(': ', 1)[1])
pyspark.sql.utils.AnalysisException: cannot resolve 'datesub(d,1)' due to data type mismatch: argument 1 requires date type, however, 'd' is of struct<> type.;

請指教。

對於我的場景,我使用了以下內容

import datetime 
now =  datetime.datetime.now()
df = df.withColumn('eff_start', lit(now.strftime("%Y-%m-%d")))

對於Hive函數無法正確使用HiveContext for HiveQL的錯誤,這是一個集群問題,其中運行HiveServer2的其中一個節點由於內存問題而導致警報過多。 這導致了這個問題。 它在運行Spark 1.5和Hive 1.2的MapR Sandbox上成功測試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM