カウントの個々の列を取得してメトリクスを公開しようとしています。マップをフィルタリングする方法データフレーム内:Spark/Scala
val totalCustomers = df.count
val totalPurchaseCount = df.filter("totalPurchase > 0").count
val totalRentCount = df.filter("totalRent > 0").count
publishMetrics("Total Customer", totalCustomers)
publishMetrics("Total Purchase", totalPurchaseCount)
publishMetrics("Total Rent", totalRentCount)
publishMetrics("Percentage of Rent", percentage(totalRentCount, totalCustomers))
publishMetrics("Percentage of Purchase", percentage(totalPurchaseCount, totalCustomers))
private def percentageCalc(num: Long, denom: Long): Double = {
val numD: Long = num
val denomD: Long = denom
return if (denomD == 0.0) 0.0
else (numD/denomD) * 100
}
しかし、私はマップであるitemTypeCountsのためにこれを行うのですかわからない:私は今、私がやっているdf [customerId : string, totalRent : bigint, totalPurchase: bigint, itemTypeCounts: map<string, int> ]
を持っています。私は、各キー入力に基づいてカウントとパーセンテージを求めます。問題は、キー値が動的であることです。私は手前でキー値を知る方法がないことを意味します。どのキーがどのように各キー値のカウントを取得するか教えてくれますか?私はスカラ/スパーク、新しい各カラムの数を得るための他の効率的なアプローチは非常に感謝しています。
サンプルデータ:
customerId : 1
totalPurchase : 17
totalRent : 0
itemTypeCounts : {"TV" : 4, "Blender" : 2}
customerId : 2
totalPurchase : 1
totalRent : 1
itemTypeCounts : {"Cloths" : 4}
customerId : 3
totalPurchase : 0
totalRent : 10
itemTypeCounts : {"TV" : 4}
ので、出力は次のとおりです。
totalCustomer : 3
totalPurchaseCount : 2 (2 customers with totalPurchase > 0)
totalRent : 2 (2 customers with totalRent > 0)
itemTypeCounts_TV : 2
itemTypeCounts_Cloths : 1
itemTypeCounts_Blender : 1
あなたがサンプルの入力データと所望の出力を提供してもらえますか? – LiMuBei
@LiMuBeiサンプルデータを更新しました。 – Newbie