正如web上的manyother locations中所提到的,向现有DataFrame添加新列并不简单,不幸的是,拥有此功能非常重要(即使它在分布式环境中效率低下),特别是在尝试使用unionAll
连接两个DataFrame
时。
要将null
列添加到DataFrame
以促进unionAll
,最佳的解决方案是什么?
我的版本是这样的:
from pyspark.sql.types import StringType
from pyspark.sql.functions import UserDefinedFunction
to_none = UserDefinedFunction(lambda x: None, StringType())
new_df = old_df.withColumn('new_column', to_none(df_old['any_col_from_old']))
4条答案
按热度按时间c3frrgcw1#
这里所需要的只是导入
StringType
并使用lit
和cast
:完整示例:
Scala的等价物可以在这里找到:Create new Dataframe with empty/null field values
svmlkihl2#
我会将lit(None)强制转换为NullType而不是StringType,这样,如果我们必须过滤掉该列上的非空行......就可以很容易地完成如下操作
如果要强制转换为StringType,请注意不要使用lit(“None”)(带引号),因为它将无法在col(“new_column”)上搜索具有过滤条件.isNull()的记录。
zyfwsgd63#
不带
import StringType
的选件完整示例:
g6baxovj4#
输出:
或在pyspark 2.2+中