当前位置: 首页 > 知识库问答 >
问题:

在Spark数据帧中用null替换空值

东门子昂
2023-03-14

我有一个包含n列的数据帧,我想用空值替换所有这些列中的空字符串

我试过用

val ReadDf = rawDF.na.replace("columnA", Map( "" -> null));

val ReadDf = rawDF.withColumn("columnA", if($"columnA"=="") lit(null) else $"columnA" );

他们两个都没有工作。

如有任何线索,我们将不胜感激。谢谢

共有1个答案

卢宜然
2023-03-14

您的第一个方法接缝失败,因为一个错误阻止了替换能够将值替换为空值,请参阅此处。

第二种方法失败了,因为您混淆了驱动程序端Scala代码和执行器端数据帧指令:if-else表达式将在驱动程序上计算一次(而不是每个记录);您希望用调用when函数来替换它;此外,要比较列的值,需要使用操作符,而不是Scala的操作符,Scala的操作符只是比较驾驶员侧列对象:

import org.apache.spark.sql.functions._

rawDF.withColumn("columnA", when($"columnA" === "", lit(null)).otherwise($"columnA"))
 类似资料:
  • 我在pyspark中有一个超过300列的数据帧。在这些列中,有些列的值为null。 例如: 当我想对列u 1求和时,结果得到的是Null,而不是724。 现在,我想用空格替换数据框所有列中的null。因此,当我尝试对这些列求和时,我不会得到null值,但会得到一个数值。 我们如何在pyspark中实现这一点

  • 我和Spark一起在Databricks上工作。编程语言是Scala。 我有两个数据帧: 主数据框:见截图:1 查找数据帧:参见屏幕截图3 我想: 查找主数据框中“年龄”=-1的所有行 我对如何做这件事伤了脑筋。我唯一想到的是将dataframe存储为DataRicks中的表,并使用SQL语句(SQL.Context.SQL…),结果非常复杂。 我想知道是否有更有效的方法。 编辑:添加可复制的示例

  • 这里我想要的是将特定列中的值替换为null,如果它是空字符串。 原因是我使用的是以基于另一列填充数据帧的一列,但我注意到在某些行中,值是而不是,因此函数无法按预期工作。 在上面的例子中,我希望首先用列填充,如果它不为空,如果它为空,则用列等等。但是由于某个时候,列被而不是null填充,我在'resolved_id'中得到了。 我试过用 但基于留档,只有当键和值都是或或时才有效,所以我不能在这里使用

  • 我正在使用: Python 3.6.8 火花2.4.4 我在spark类路径中有以下JAR: http://repo1.maven.org/maven2/com/databricks/spark-redshift_2.11/2.0.1/spark-redshift_2.11-2.0.1.jar http://repo1.maven.org/maven2/com/databricks/spark-a

  • RDD是以数组[数组[字符串]的格式创建的,具有以下值: 我想用模式创建一个数据帧: 接下来的步骤: 给出以下错误:

  • 我有一个如下的CSV文件。 我想把这个转化成下面。 基本上,我想在输出数据帧中创建一个名为idx的新列,该列将填充与键=idx,value=“n”后面的行相同的值“n”。