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的用户数量,您将失去一些性能)或执行左侧连接。