SELECT count(id), sum(if(column1 = 1, 1, 0)) from groupedTable
のようなものは、単一のパスで合計レコードの数だけでなく、フィルタレコードを実行するために処方することができます。
spark-data-frame APIでこれを実行するにはどうすればよいですか?カウントのうちの1つを元のデータフレームに戻すことを必要とすることなく、
SELECT count(id), sum(if(column1 = 1, 1, 0)) from groupedTable
のようなものは、単一のパスで合計レコードの数だけでなく、フィルタレコードを実行するために処方することができます。
spark-data-frame APIでこれを実行するにはどうすればよいですか?カウントのうちの1つを元のデータフレームに戻すことを必要とすることなく、
ただ、両方のケースのためにcount
を使用します。
df.select(count($"id"), count(when($"column1" === 1, true)))
列である場合nullable
あなたは(所望の出力に応じて、3210またはIS NULL
と例えば)そのために修正する必要があります。
あなたはハイブとしてハイブで火花を使用して試すことができますが
val conf = new SparkConf().setAppName("Hive_Test")
val sc = new SparkContext(conf)
//Creation of hive context
val hsc = new HiveContext(sc)
import spark.implicits._
import spark.sql
hsc.sql("CREATE TABLE IF NOT EXISTS emp (id INT, name STRING)")
hsc.sql("LOAD DATA LOCAL INPATH 'examples/src/main/resources/test.txt' INTO TABLE emp")
hsc.sql("""select count(id), SUM(v)
from (
select id, IF(name=1, count(*), 0) AS v
from emp
where id>0
group by id,name
) t2""")
は、あなたがしようとした合計(IF)は、コードの下に使用してデータの上にハイブのテーブルを作成する必要がSQL
ファーストの機能をサポートしていますCASE ...でこのクエリを実行するWHEN? –
あなたは 'registerTempTable'を使ってデータフレームを一時テーブルとして登録することができ、@T.Gawędaが示唆するようにSQLクエリのCASE ... WHENステートメントを使用することができます。 –
うまくいくはずです。しかし、より型式の高いscala-spark-dataframe apiにとどまることは可能ですか? –