如何在下面的数据帧中获取MAX?
val df_n = df.select($"ID").filter(($"READ") === "" && ($"ACT"!==""))
我必须找出ID
的MAX,如果ID
是NULL
,我必须将其替换为0.
答案 0 :(得分:0)
如果要查找此数据框中的最大ID,只需添加
即可.agg(max($"ID"))
但是,我不明白为什么你想要更换最大ID而不进一步分组为0.无论如何,如果你对SQL感觉更舒服,你总是可以使用SQL接口:
df.createOrReplaceTempView("DF")
spark.sql("select max(id) from DF").show
答案 1 :(得分:0)
以下情况如何?
D'
scala> val df = Seq("0", null, "5", null, null, "-8").toDF("id")
df: org.apache.spark.sql.DataFrame = [id: string]
scala> df.printSchema
root
|-- id: string (nullable = true)
scala> df.withColumn("idAsLong", $"id" cast "long").printSchema
root
|-- id: string (nullable = true)
|-- idAsLong: long (nullable = true)
scala> val testDF = df.withColumn("idAsLong", $"id" cast "long")
testDF: org.apache.spark.sql.DataFrame = [id: string, idAsLong: bigint]
scala> testDF.show
+----+--------+
| id|idAsLong|
+----+--------+
| 0| 0|
|null| null|
| 5| 5|
|null| null|
|null| null|
| -8| -8|
+----+--------+
如果您只有负值且scala> testDF.agg(max("idAsLong")).show
+-------------+
|max(idAsLong)|
+-------------+
| 5|
+-------------+
,那么null
是最大值怎么办?在null
上使用na
运算符。
Dataset
如果没有val withNulls = Seq("-1", "-5", null, null, "-333", null)
.toDF("id")
.withColumn("asInt", $"id" cast "int") // <-- column of type int with nulls
scala> withNulls.na.fill(Map("asInt" -> 0)).agg(max("asInt")).show
+----------+
|max(asInt)|
+----------+
| 0|
+----------+
并替换na
,则根本无效。
null