最近在用Spark拉数据的过程中发现得到的数据总会有None值,存成np格式对应的类型就是np.nan,用np.isnan()可以进行检查。
找了很久才发现问题的原因不是数据生成的过程,而是pyspark.sql 中的Row对象要保证是每条记录的对应属性类型是一致的,比如:
from pyspark.sql import Row
def gen_sample(a):
if a % 1 == 0:
# The type of y is float
row_result = Row(x=0, y=0.)
else:
# The type of y is int
row_result = Row(x=0, y=0)
return row_result
上述函数中,如果a既有奇数也有偶数,那么得到的结果中y属性应该会出现None值,原因在于同列的y对应的类型不一致。