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的主要内容,如果未能解决你的问题,请参考以下文章

在 spark sql 中用无值替换 Null 值

使用tohash.select时,如何用字符串替换空值?

我如何创建一个实用函数来检查来自 CSV 的空值并替换为打印 NULL

用批处理替换 csv 文件中的列值

将给定 .csv 文件中的现有值替换为 NAN

用BIML脚本中的csv文件替换所有双引号