1

たとえば、以下のようなデータフレームがあります。

df
DataFrame[columnA: int, columnB: int]

私が2つのチェックをしなければならない場合。以下のようにデータを 2 回調べます。

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

通常のコードでは、2 つのカウント変数を持ち、True でインクリメントします。Sparkデータフレームをどのように使用しますか? 誰かが適切なドキュメントにもリンクできるかどうかに感謝します。python または scala を見てうれしいです。

4

2 に答える 2

2

@ zero323の答えは的を射ていますが、最も柔軟なプログラミングモデルがSparkであることを示すために、たとえば(上記と同じデータフレームを使用して)ラムダ関数を使用してifステートメントとしてチェックを行うことができます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

For example like this:

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|
// +-------+-------+

or like this:

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|
// +-------+-------+

I am not aware of any specific documentation but I am pretty sure you'll find this in any good SQL reference.

于 2015-12-30T13:37:52.960 に答える