这就是我的csv数据的样子:
TagNumber,DatePaid,TotalPaid
ABCD,11/5/2017,$101
EFGH,12/5/2017,$201
ABCD,15/5/2017,$501
我正在创建一个数据帧,它将按TagNumber对数据进行分组,获取Date和最大值以及TotalPaid总和。
这就是我创建数据帧的方式
valid_data = valid_data.select('TagNumber', from_unixtime(unix_timestamp('DatePaid', 'MM/dd/yyy')).alias('m_paiddDate'), "TotalPaid")\
.groupBy("TagNumber") \
.agg(F.min("DatePaid").alias("min_date"), F.max("DatePaid").alias("max_date"), F.count("TagNumber").alias("no_of_times_paid")) \
.orderBy("no_of_times_paid", ascending=False)
当我将F.sum("TotalPaid").alias("Total_Paid")
添加到聚合器时,我得到Total_Paid
列的空值,因为$
符号将其视为字符串。
如何获得sum
列的TotalPaid
?
尝试这样的东西将TotalPaid
转换为数值(首先用正则表达式删除$,然后转换):
valid_data = valid_data.withColumn(
'TotalPaid', F.regexp_replace('TotalPaid','\$', '').cast('float')
)