pyspark.sql.utils.ParseException:u“\nextranouse>输入'xxx'应为{'),','}
我有两张主要的桌子:航班和假期 航班由以下列标识:outboundlegid、inboundlegid、agent、querydatetime。适用于该问题的其他列为out_date、in_date。它们指示航班何时起飞和返回日期 和带有“开始”、“结束”和“类型”列的假日 我想确定航班起飞/起飞日期是否与假期表中的任何内容相交 我遵循了来自的一些建议,以确定外出/入住日期是否与任何假期相交 但是,我得到:pyspark.sql.utils.ParseException:u\n异常 输入'outboundlegid'应为{,,'}第35行,位置12。这里有什么问题 文件脚本_2019-02-08-10-46-14.py,第182行,在文件中 /mnt/thread/usercache/root/appcache/application_1549622095592_0002/container_1549622095592_0002_01_000001/pyspark.zip/pyspark/sql/session.py, 第603行,在sql文件中 /mnt/Thread/usercache/root/appcache/application_1549622095592_0002/container_1549622095592_0002_01_000001/py4j-0.10.4-src.zip/py4j/java_gateway.py, 第1133行,在调用文件中 /mnt/thread/usercache/root/appcache/application_1549622095592_0002/container_1549622095592_0002_01_000001/pyspark.zip/pyspark/sql/utils.py, 第73行,在deco pyspark.sql.utils.ParseException中:u\nextranouse 输入'outboundlegid'应为{,,'}行35,位置12\n\n==SQL ==\n\n使用t\n选择\n f.outboundlegid、\n f.inboundlegid、\n f.agent、\n f.querydatetime、\n类型为“假日”和“过期”时的情况 在开始和结束之间\n然后为真\n否则为假\n结束 out\u是假日,\n类型为“长周末”和out\u日期时的情况 在开始和结束之间\n然后为真\n否则为假\n结束 out\u是\u longweekends,\n类型为'HOLIDAY'且in\u日期介于 开始和结束\n然后为真\n否则为假\n结束为假日\n 当type='LONG\u WEEKENDS'和开始和结束之间的开始日期\n 真\n否则假\n结束于\u是\u长周末\n来自f\n交叉航班 加入假日h\n\n选择\n f.*\n t1。外出是假日,\n t1.外出是长周末,\n t1.入内是长周末,\n t1.入内是长周末,\n 从\n选择\n outboundlegid,\n------^^ \n inboundlegid,\n 代理,\n querydatetime,\n在下列情况下 数组\u包含集合\u放样\u为\u假日,为true\n然后为true\n否则 false\n结束\u是\u假日,\n情况是 数组\u包含集合\u放样\u为\u,为真\n然后为真\n ELSE false \n END out \u是\u longweekends,\n当 数组\u containscollect\u setin\u是\u holiday,true\n然后true\n ELSE false\n结束于\u为\u假日,\n情况如下: 数组\u containscollect\u setin\u为\u,为true\n然后为true\n 否则为false\n 这里有什么问题pyspark.sql.utils.ParseException:u“\nextranouse>输入'xxx'应为{'),','},sql,apache-spark,pyspark,pyspark-sql,Sql,Apache Spark,Pyspark,Pyspark Sql,我有两张主要的桌子:航班和假期 航班由以下列标识:outboundlegid、inboundlegid、agent、querydatetime。适用于该问题的其他列为out_date、in_date。它们指示航班何时起飞和返回日期 和带有“开始”、“结束”和“类型”列的假日 我想确定航班起飞/起飞日期是否与假期表中的任何内容相交 我遵循了来自的一些建议,以确定外出/入住日期是否与任何假期相交 但是,我得到:pyspark.sql.utils.ParseException:u\n异常 输入'out
resultDf = spark.sql("""
WITH t (
SELECT
f.outboundlegid,
f.inboundlegid,
f.agent,
f.querydatetime,
CASE WHEN type = 'HOLIDAY' AND (out_date BETWEEN start AND end)
THEN true
ELSE false
END out_is_holiday,
CASE WHEN type = 'LONG_WEEKENDS' AND (out_date BETWEEN start AND end)
THEN true
ELSE false
END out_is_longweekends,
CASE WHEN type = 'HOLIDAY' AND (in_date BETWEEN start AND end)
THEN true
ELSE false
END in_is_holiday,
CASE WHEN type = 'LONG_WEEKENDS' AND (in_date BETWEEN start AND end)
THEN true
ELSE false
END in_is_longweekends
FROM flights f
CROSS JOIN holidays h
)
SELECT
f.*,
t1.out_is_holiday,
t1.out_is_longweekends,
t1.in_is_holiday,
t1.in_is_longweekends,
FROM (
SELECT
outboundlegid, # <<< I am guessing something wrong with this? But Why?
inboundlegid,
agent,
querydatetime,
CASE WHEN array_contains(collect_set(out_is_holiday), true)
THEN true
ELSE false
END out_is_holiday,
CASE WHEN array_contains(collect_set(out_is_longweekends), true)
THEN true
ELSE false
END out_is_longweekends,
CASE WHEN array_contains(collect_set(in_is_holiday), true)
THEN true
ELSE false
END in_is_holiday,
CASE WHEN array_contains(collect_set(in_is_longweekends), true)
THEN true
ELSE false
END in_is_longweekends
FROM t
GROUP BY
querydatetime,
outboundlegid,
inboundlegid,
agent
LIMIT 100000
) t1
INNER JOIN flights f
ON t1.querydatetime = f.querydatetime
AND t1.outboundlegid = f.outboundlegid
AND t1.inboundlegid = f.inboundlegid
AND t1.agent = f.agent
INNER JOIN agents a
ON f.agent = a.id
INNER JOIN airports p
ON f.querydestinationplace = p.airportId
""")
t1.in_后面挂逗号是longweekends和FROM之前的。@user10465355,您可以将其作为答案,我标记为answeredI很高兴它有帮助,但它只不过是一个打字错误,所以我们称之为无法再复制的问题: