如何使用应该替换的空值(使用0)来增加每列的最大值?

时间:2017-03-09 06:57:17

标签: apache-spark apache-spark-sql

如何在下面的数据帧中获取MAX?

val df_n = df.select($"ID").filter(($"READ") === "" && ($"ACT"!==""))

我必须找出ID的MAX,如果IDNULL,我必须将其替换为0.

2 个答案:

答案 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|
+----+--------+

使用na运算符

如果您只有负值且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

请参阅na: DataFrameNaFunctions