我有这个Pypark数据框
测向:
+---------+----+----+----+----+----+----+----+----+----+
|partition| 1| 2| 3| 4| 5| 6| 7| 8| 9|
+---------+----+----+----+----+----+----+----+----+----+
| 7|null|null|null|null|null|null| 0.7|null|null|
| 1| 0.2| 0.1| 0.3|null|null|null|null|null|null|
| 8|null|null|null|null|null|null|null| 0.8|null|
| 4|null|null|null| 0.4| 0.5| 0.6|null|null| 0.9|
+---------+----+----+----+----+----+----+----+----+----+
我把
+---------+--------------------+
|partition| vec_comb|
+---------+--------------------+
| 7| [,,,,,,,, 0.7]|
| 1|[,,,,,, 0.1, 0.2,...|
| 8| [,,,,,,,, 0.8]|
| 4|[,,,,, 0.4, 0.5, ...|
+---------+--------------------+
如何移除 NullTypes
从 vec_comb
列?
预期产量:
+---------+--------------------+
|partition| vec_comb|
+---------+--------------------+
| 7| [0.7]|
| 1| [0.1, 0.2,0.3]|
| 8| [0.8]|
| 4|[0.4, 0.5, 0.6, 0,9]|
+---------+--------------------+
我已经试过了(显然是错的,但我不能把我的头绕在这上面):
def clean_vec(array):
new_Array = []
for element in array:
if type(element)==FloatType():
new_Array.append(element)
return new_Array
udf_clean_vec = F.udf(f=(lambda c: clean_vec(c)), returnType=ArrayType(FloatType()))
df = df.withColumn('vec_comb_cleaned', udf_clean_vec('vec_comb'))
2条答案
按热度按时间zbwhf8kr1#
你可以使用高阶函数
filter
要删除空元素:你可以使用自定义项,但它会慢一些,例如。
uxhixvfz2#
不使用特定于pyspark的特性,还可以创建
list
只是filter
把这个NaN
学生:并通过只选择所需的两个列来删除旧列: