pyspark sql子查询不支持

pw9qyyiw  于 2021-07-09  发布在  Spark
关注(0)|答案(19)|浏览(509)

我试图在pyspark中执行下面的sql语法。查询应该返回订阅的成功率(total subscription/total \u entries)。table_name=banking columns name:'y'(购买的订阅)包含'yes'和'no'作为数据值。
执行的查询:
spark.sql(“select(x.total\u subscribed/y.total\u entries)as success\u rate from(select count()as total\u subscribed from banking\u tbl where y='yes')x,(select count()as total\u entries from banking\u tbl)y”).show()
我使用两个内部子查询:
下面的第一个内部查询返回购买订阅的客户总数:
(选择count()作为从银行业认购的总金额,其中y='yes')x)
第二个查询返回表中的客户总数:
(选择count(
)作为“银行业务”的“总分录”)
以及外部查询获取订阅率:(购买订阅的总客户/总客户)
选择(x.total\u subscribed/y.total\u entries)作为成功率
但我得到一个错误如下:
使用交叉联接语法允许这些关系之间的笛卡尔乘积,或:通过设置配置变量spark.sql.crossjoin.enabled=true来启用隐式笛卡尔乘积
样本数据:+-------+

rslzwgfq

rslzwgfq16#

--+--------+---------+-------+-------+-------+----+-------+---+-----+--------+--------+-----+--------+--------+---+

wz3gfoph

wz3gfoph18#

我认为使用条件聚合更简单:

select avg(case when y = 'yes' then 1.0 else 0 end)
from banking_tbl;

相关问题