Dataframe spark数据框中列上的SQL ISNULL函数

Dataframe spark数据框中列上的SQL ISNULL函数,dataframe,apache-spark,Dataframe,Apache Spark,我是新手。我正在尝试对金额的特定列应用ISNULL函数。 但它给出了未发现的错误。在进行任何类型的聚合时,是否有方法对特定对象应用ISNULL val totalAmountvalueDF = sourceDF.groupBy("Id").**agg(sum(ISNULL("amount",0))**.as("totalAmountvalue")) 我无法申请其他人填写此金额栏,因为我有其他目的。因此,我只能在进行聚合时应用ISNULL。我不知道是否可以在聚合时过滤这些值。但是,在执行聚合之后

我是新手。我正在尝试对金额的特定列应用
ISNULL
函数。 但它给出了未发现的错误。在进行任何类型的聚合时,是否有方法对特定对象应用
ISNULL

val totalAmountvalueDF = sourceDF.groupBy("Id").**agg(sum(ISNULL("amount",0))**.as("totalAmountvalue"))

我无法申请其他人填写此金额栏,因为我有其他目的。因此,我只能在进行聚合时应用
ISNULL

我不知道是否可以在聚合时过滤这些值。但是,在执行聚合之后,您肯定可以过滤sum列。
val totalAmountvalueDF = sourceDF.groupBy("Id").**agg(sum(ISNULL("amount",0))**.as("totalAmountvalue"))
此外,在这种情况下,我相信您甚至可以在聚合之前过滤“Amount”列中的空值。您的代码将更加高效,因为在执行分组方式时,您将洗牌更少的数据

val schema = StructType(Seq(
  StructField("UserID", StringType, true),
  StructField("Amount", IntegerType, true)
))

val inputDF = Seq(Row("U1" ,3)
  ,Row("U2" ,1)
  ,Row("U1" ,0)
  ,Row("U3" ,null)
  ,Row("U1" ,1)
)

val someDF = spark.createDataFrame(spark.sparkContext.parallelize(inputDF), schema)

someDF.groupBy(col("UserID"))
  .agg(sum(col("Amount")).as("sum")).filter(col("sum").isNotNull)
  .show()
或:


希望这能回答您的问题。

谢谢您的回复。它将过滤数据。我的疑问是,当我们将这个聚合数据集与基于用户id的其他数据集合并时,我们将丢失相应的用户id信息,我认为,如果您在正确的筛选之后执行内部合并,那么。如果要保留sum=null的用户,您有两个选项:连接后过滤(取决于sum=null的用户数量,您将失去一些性能)或执行左侧连接。