我有一个Spark 1.5.0 DataFrame,其中一列中混合了
请参见下面我的尝试,结果出现错误。
null
和空字符串。我想将所有列中的空字符串转换为null
(在Python中为None
)。由于DataFrame可能有数百列,因此我试图避免对每个列进行硬编码操作。请参见下面我的尝试,结果出现错误。
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
## Create a test DataFrame
testDF = sqlContext.createDataFrame([Row(col1='foo', col2=1), Row(col1='', col2=2), Row(col1=None, col2='')])
testDF.show()
## +----+----+
## |col1|col2|
## +----+----+
## | foo| 1|
## | | 2|
## |null|null|
## +----+----+
## Try to replace an empty string with None/null
testDF.replace('', None).show()
## ValueError: value should be a float, int, long, string, list, or tuple
## A string value of null (obviously) doesn't work...
testDF.replace('', 'null').na.drop(subset='col1').show()
## +----+----+
## |col1|col2|
## +----+----+
## | foo| 1|
## |null| 2|
## +----+----+
lambda x: None if not x else x
并用udf
包装起来就可以很好地工作 :) - zero323