Решение PySpark
from pyspark.sql.functions import udf,col,split
from pyspark.sql.types import FloatType
#UDF to sum the split values returning none when non numeric values exist in the string
#Change the implementation of the function as needed
def values_sum(split_list):
total = 0
for num in split_list:
try:
total += float(num)
except ValueError:
return None
return total
values_summed = udf(values_sum,FloatType())
res = df.withColumn('summed',values_summed(split(col('values'),';')))
res.show()
Решение могло бы быть однострочным, если бы было известно, что значения массива имеют заданный тип данных. Однако лучше использовать go с более безопасной реализацией, охватывающей все случаи.
Решение Hive
Используйте explode
с split
и group by
для суммирования значений.
select id,sum(cast(split_value as float)) as summed
from tbl
lateral view explode(split(values,';')) t as split_value
group by id