2016-10-22 4 views
1

私は、各列のフィルタ(値> 0)を持つすべての列の数が必要なデータフレームを持っています。する方法SPARK/SCALAで複数の列数を効率的に使用できますか?

今私がやっている:

import org.apache.spark.storage.StorageLevel._ 

    df.persist(MEMORY_AND_DISK) 

    val totalCustomers = df.count 

    val totalpurchaseCount = df.filter("totalpurchase > 0").count 

    val totalRentsCount = df.filter("totalRent > 0").count 

    val totalTVCount = df.filter("tvCount > 0").count 

    val totalMovieCount = df.filter("movieCount > 0").count 

    val totalKidsCount = df.filter("kidsCount > 0 ").count 

    val totalNonKidsCount = df.filter("adultsCount > 0").count 

は、これを効率的に行うための方法はありますか?

答えて

2

は、列のリストを定義します。

val cols = Seq("totalpurchase", "totalRent", ...) 

輸入に必要な機能:

import org.apache.spark.sql.functions.{count, col, when} 

を選択して集計:

val aggs = df.select(cols.map(c => count(when(col(c) > 0, true)).alias(c)): _*) 

収集結果と抽出値を。

aggs.first match { 
    case row => (0 until cols.size).map(i => cols(i) -> row.getLong(i)).toMap 
} 
関連する問題