如何解决返回PySpark SQL中所有空值的列总和
我是Spark的新手,这可能是一个简单的问题。
我有一个名为sql_left的SQL,格式为:
以下是使用sql_left.take(1)生成的示例数据:
[Row(REPORT_ID='2016-30-15/08/2019',Stats Area='2 Metropolitan',Suburb='GREENACRES',Postcode=5086,LGA Name='CITY OF PORT ADELAIDE ENFIELD',Total Units=3,Total Cas=0,Total Fats=0,Total SI=0,Total MI=0,Year=2016,Month='November',Day='Wednesday',Time='01:20 am',Area Speed=50,Position Type='Not Divided',Horizontal Align='Straight road',Vertical Align='Level',Other Feat='Not Applicable',Road Surface='Sealed',Moisture Cond='Dry',Weather Cond='Not Raining',DayNight='Night',Crash Type='Hit Parked Vehicle',Unit Resp=1,Entity Code='Driver Rider',CSEF Severity='1: PDO',Traffic Ctrls='No Control',DUI Involved=None,Drugs Involved=None,ACCLOC_X=1331135.04,ACCLOC_Y=1677256.22,UNIQUE_LOC=13311351677256,REPORT_ID='2016-30-15/08/2019',Unit No=2,No Of Cas=0,Veh Reg State='UNKNOWN',Unit Type='Motor Vehicle - Type Unknown',Veh Year='XXXX',Direction Of Travel='East',Sex=None,Age=None,Lic State=None,Licence Class=None,Licence Type=None,Towing='Unknown',Unit Movement='Parked',Number Occupants='000',Postcode=None,Rollover=None,Fire=None)]
注意:“年龄”列具有“ XXX”,“ NUll”和其他整数值,例如023,034等。
printSchema将Age,Total Cas显示为整数。
我尝试下面的代码首先连接两个表:
sql_left = spark.sql('''
SELECT *
FROM sql_crash c Left JOIN sql_units u ON c.REPORT_ID=u.REPORT_ID''')
sql_left.createOrReplaceTempView("mytable")
下面的代码可生成Total Cas:
sql_result = spark.sql('''select concat_ws(' ',Day,Month,Year,Time) as Date_Time,Age,"Licence Type","Unit Type",Sex,COALESCE(sum("Total Cas"),0) as Total_casualities from mytable where Suburb in ('ADELAIDE','ADELAIDE AIRPORT','NORTH ADELAIDE','PORT ADELAIDE') Group by Date_Time,Sex order by Total_casualities desc''')
sql_result.show(20,truncate=False)
我得到的输出在下面,总和为0。
+--------------------------------+---+------------+---------+-------+-----------------+
|Date_Time |Age|Licence Type|Unit Type|Sex |Total_casualities|
+--------------------------------+---+------------+---------+-------+-----------------+
|Friday December 2016 02:45 pm |XXX|Licence Type|Unit Type|Unknown|0.0 |
|Saturday September 2017 06:35 pm|023|Licence Type|Unit Type|Male |0.0 |
+--------------------------------+---+------------+---------+-------+-----------------+
我尝试了多种选择,但是没有解决。
我的主要问题是,如果我使用COALESCE(sum("Total Cas"),0)
,则Total_casualities返回所有行的0.0。如果我不使用COALESCE,它将显示为NULL。
非常感谢您的帮助。
解决方法
与其在双引号(“ Total Cas”)中指定Total Cas,请在反引号中注明。
Select County,[Total Of VoteCount] From AGC
UNION ALL
Select County,[Total Of VoteCount] From CBC;
注意:中间用空格隔开的列名需要用反引号指定。正如您在引号中提到的那样,它会将其视为字符串,这就是为什么您未获得总和。另外,对于其他列(如i.e. `Total Cas`
,Licence Type
),它显示为字符串而不是值。希望你明白了。
Unit Type
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。