1

例如,我有一个如下所示的数据框,

df
DataFrame[columnA: int, columnB: int]

如果我必须做两次检查。我要检查数据两次,如下所示,

df.where(df.columnA == 412).count()
df.where(df.columnB == 25).count()

在普通代码中,我将有两个计数变量并在 True 上递增。我将如何使用 spark 数据框?欣赏是否有人也可以链接到正确的文档。很高兴看到 python 或 scala。

4

2 回答 2

2

@ zero323 的答案是正确的,但只是为了表明最灵活的编程模型是 Spark,您可以使用 lambda 函数if在 a 中作为语句进行检查map,例如(使用与上述相同的数据框)

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。

于 2015-12-30T14:38:05.290 回答
2

例如像这样:

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 参考中找到它。

于 2015-12-30T13:37:52.960 回答