如何在单个 运行 中获取多个查询
How to get multiple queries in single run
例如我有一个如下所示的数据框,
df
DataFrame[columnA: int, columnB: int]
如果我必须做两次检查。我将像下面一样检查数据两次,
df.where(df.columnA == 412).count()
df.where(df.columnB == 25).count()
在正常代码中,我将有两个计数变量并在 True 上递增。我将如何使用 spark 数据框?如果有人也可以 link 获得正确的文档,我们将不胜感激。很高兴看到 python 或 scala.
例如像这样:
import org.apache.spark.sql.functions.sum
val df = sc.parallelize(Seq(
(412, 0),
(0, 25),
(412, 25),
(0, 25)
)).toDF("columnA", "columnB")
df.agg(
sum(($"columnA" === 412).cast("long")).alias("columnA"),
sum(($"columnB" === 25).cast("long")).alias("columnB")
).show
// +-------+-------+
// |columnA|columnB|
// +-------+-------+
// | 2| 3|
// +-------+-------+
或者像这样:
import org.apache.spark.sql.functions.{count, when}
df.agg(
count(when($"columnA" === 412, $"columnA")).alias("columnA"),
count(when($"columnB" === 25, $"columnB")).alias("columnB")
).show
// +-------+-------+
// |columnA|columnB|
// +-------+-------+
// | 2| 3|
// +-------+-------+
我不知道有任何具体的文档,但我很确定您会在任何好的 SQL 参考资料中找到它。
@zero323 的回答是正确的,但只是为了表明最灵活的编程模型是 Spark,您可以在 map
中使用 lambda 函数作为 if
语句进行检查,例如(使用与上面相同的数据框)
import org.apache.spark.sql.functions._
val r1 = df.map(x => {
var x0 = 0
var x1 = 0
if (x(0) == 412) x0=1
if (x(1) == 25) x1=1
(x0, x1)
}).toDF("x0", "x1").select(sum("x0"), sum("x1")).show()
这个模型几乎可以让你做任何你能想到的事情,尽管你最好坚持使用可用的特定 API。
例如我有一个如下所示的数据框,
df
DataFrame[columnA: int, columnB: int]
如果我必须做两次检查。我将像下面一样检查数据两次,
df.where(df.columnA == 412).count()
df.where(df.columnB == 25).count()
在正常代码中,我将有两个计数变量并在 True 上递增。我将如何使用 spark 数据框?如果有人也可以 link 获得正确的文档,我们将不胜感激。很高兴看到 python 或 scala.
例如像这样:
import org.apache.spark.sql.functions.sum
val df = sc.parallelize(Seq(
(412, 0),
(0, 25),
(412, 25),
(0, 25)
)).toDF("columnA", "columnB")
df.agg(
sum(($"columnA" === 412).cast("long")).alias("columnA"),
sum(($"columnB" === 25).cast("long")).alias("columnB")
).show
// +-------+-------+
// |columnA|columnB|
// +-------+-------+
// | 2| 3|
// +-------+-------+
或者像这样:
import org.apache.spark.sql.functions.{count, when}
df.agg(
count(when($"columnA" === 412, $"columnA")).alias("columnA"),
count(when($"columnB" === 25, $"columnB")).alias("columnB")
).show
// +-------+-------+
// |columnA|columnB|
// +-------+-------+
// | 2| 3|
// +-------+-------+
我不知道有任何具体的文档,但我很确定您会在任何好的 SQL 参考资料中找到它。
@zero323 的回答是正确的,但只是为了表明最灵活的编程模型是 Spark,您可以在 map
中使用 lambda 函数作为 if
语句进行检查,例如(使用与上面相同的数据框)
import org.apache.spark.sql.functions._
val r1 = df.map(x => {
var x0 = 0
var x1 = 0
if (x(0) == 412) x0=1
if (x(1) == 25) x1=1
(x0, x1)
}).toDF("x0", "x1").select(sum("x0"), sum("x1")).show()
这个模型几乎可以让你做任何你能想到的事情,尽管你最好坚持使用可用的特定 API。