Я пытаюсь выполнить куст SQL от спарк. Следующее прекрасно работает с использованием spark-sql или из spark-submit для python со встроенными выражениями hive sql.
spark-sql --master yarn -e "select count(*) from adhoc.dual;"
Но я не могу казнить
spark-sql - master yarn -e "выберите current_user () из adhoc.dual;"
Я получаю следующую ошибку
Error in query: Undefined function: 'current_user'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 1 pos 7
current_user - постоянная функция улья.
Аналогично, из pyspark я могу выполнять большинство операторов улья, в том числе те, которые связаны с пользовательским UDF, после регистрации UDF в качестве временной функции, например:
СОЗДАТЬ ВРЕМЕННУЮ ФУНКЦИЮ foo AS 'com.example.foo';
Но выполнение макроса создания куста приводит к сбою
from pyspark.sql import SparkSession
from pyspark.sql import Row
from pyspark.sql.types import IntegerType, StringType
import pyspark.sql.functions as F
spark = SparkSession.builder.appName("Python Spark Hive example").enableHiveSupport().getOrCreate()
spark.sql("CREATE TEMPORARY MACRO PacificTzDate(ts BIGINT) DATE(FROM_UTC_TIMESTAMP(FROM_UNIXTIME(ts, 'yyyy-MM-dd HH:mm:ss'), 'America/Los_Angeles')")
Это происходит со следующей ошибкой:
pyspark.sql.utils.ParseException: u"\nOperation not allowed: CREATE TEMPORARY MACRO(line 1, pos 0)\n\n== SQL ==\nCREATE TEMPORARY MACRO PacificTzDate(ts BIGINT) DATE(FROM_UTC_TIMESTAMP(FROM_UNIXTIME(ts, 'yyyy-MM-dd HH:mm:ss'), 'America/Los_Angeles')\n^^^\n"
19/01/02 20:09:49 ИНФОРМАЦИЯ SparkContext: вызов остановки () из отключающего крюка