在 Pyspark 中实现 Hive UNION

Implementing Hive UNION in Pyspark

我正在尝试从文件中读取 SQL 并在 Pyspark 作业中 运行 它。 SQL 的结构如下:

select <statements>
sort by rand()
limit 333333 
UNION ALL
select <statements>
sort by rand()
limit 666666

这是我在 运行 时遇到的错误:

pyspark.sql.utils.ParseException: u"\nmismatched input 'UNION' expecting {, '.', '[', 'OR', 'AND', 'IN', NOT, 'BETWEEN', 'LIKE', RLIKE, 'IS', EQ, '<=>', '<>', '!=', '<', LTE, '>', GTE, '+', '-', '*', '/', '%', 'DIV', '&', '|', '^'}

这是因为 UNION ALL/UNION 不被 spark SQL 支持还是跟解析出错了?

PySpark 和 Hive 在 sql 语句中支持 UNION。 我能够 运行 以下配置单元语句

(SELECT * from x ORDER BY rand() LIMIT 50)
UNION
(SELECT * from y ORDER BY rand() LIMIT 50)

在 pyspark 中你也可以这样做

df1=spark.sql('SELECT * from x ORDER BY rand() LIMIT 50')
df2=spark.sql('SELECT * from y ORDER BY rand() LIMIT 50')
df=df1.union(df2)