【发布时间】:2016-01-22 03:17:06
【问题描述】:
我有一个Spark 1.5.0 DataFrame,在同一列中混合了null 和空字符串。我想将所有列中的所有空字符串转换为null(None,在 Python 中)。 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|
## +----+----+
【问题讨论】:
-
@palsch,不,它不返回列表。它返回一个数据帧。我用 Spark 文档的链接更新了问题。
-
@palsch 这不是一般的 Python 问题! Spark DataFrames 是分布式数据结构,通常用于对大数据进行大量数据分析。所以你的解决方案不合适。
-
@eliasah 说实话,Pythonic
lambda x: None if not x else x用udf包裹就可以了 :) -
@zero323 但他要求 OP 返回一个列表...
-
哪个答案最有效?
标签: python apache-spark dataframe apache-spark-sql pyspark