CSV 文件中的任何“null”字符串都应替换为 pyspark 数据帧中的 SQL 值 null - Databricks
Posted
技术标签:
【中文标题】CSV 文件中的任何“null”字符串都应替换为 pyspark 数据帧中的 SQL 值 null - Databricks【英文标题】:Any "null" strings in the CSV file should be replaced with the SQL value null in pyspark dataframe - Databricks 【发布时间】:2021-09-02 23:37:21 【问题描述】:我有一个“null”作为字符串的 Dataframe,我想用 Databricks 中 PySpark Dataframe 中的 SQL 值 null 替换它。
有人可以帮忙吗?我对 Spark 比较陌生。
谢谢。
【问题讨论】:
能否提供数据样本? 【参考方案1】:试试这个 -
from pyspark.sql.functions import expr
df = df.withColumn('string_col' , expr("CASE WHEN col = 'null' THEN NULL else col END")
基本上你用 NULL 值替换坏字符串,否则保留原始值。用正确的名称替换 'string_col' 和 'col'。
【讨论】:
【参考方案2】:你可以试试这个
>>> from pyspark.sql.functions import when
>>> data = (['A', 1], ['B', 2], ['null', 3])
>>> df = spark.createDataFrame(data, schema=['str', 'id'])
>>> df.show()
+----+---+
| str| id|
+----+---+
| A| 1|
| B| 2|
|null| 3|
+----+---+
>>> df.withColumn("new_col", when(df.str == "null", None).otherwise(df.str)).show()
+----+---+-------+
| str| id|new_col|
+----+---+-------+
| A| 1| A|
| B| 2| B|
|null| 3| null|
+----+---+-------+
【讨论】:
【参考方案3】:也从上面@Hegde 的回答延伸,我只是尝试使用 Pyspark 的.replace()
api(也适用于 Databricks),它的工作原理如下:
newDF = DF.replace("null", None)
因此,newDF
最终将在所有出现“null”(作为字符串)的位置包含 SQL NULL。
一些提示:为了在数据帧中用 SQL NULL 替换任何缺失/空白字符串,然后尝试:.replace("", None)
即传递一对空引号以换取None
(或null
)值。
编码愉快!
【讨论】:
以上是关于CSV 文件中的任何“null”字符串都应替换为 pyspark 数据帧中的 SQL 值 null - Databricks的主要内容,如果未能解决你的问题,请参考以下文章