select "NCA-15",count(*) from table
даст NCA-15,8
в виде фрейма данных, а .rdd
сделает Rdd[Row]
из Rdd[Row]
, вы можете сделать кортеж.
см. Ниже мой пример пончика ... так как у меня нет Hive, я смоделировал с temptable
package com.examples
import org.apache.log4j.Level
import org.apache.spark.sql.{Row, SparkSession}
/**
* Created by Ram Ghadiyaram
*/
object RDDOfTupleExample {
org.apache.log4j.Logger.getLogger("org").setLevel(Level.ERROR)
def main(args: Array[String]) {
val spark = SparkSession.builder.
master("local")
.appName(this.getClass.getName)
.getOrCreate()
val donuts = Seq(("plain donut", 1.50), ("plain donut", 1.50)
, ("vanilla donut", 2.0), ("vanilla donut", 2.0)
, ("glazed donut", 2.50))
val df = spark
.createDataFrame(donuts)
.toDF("Donut_Name", "Price")
//lets suppose this is your hive table since i dont have hive i simulated with temp table
df.createOrReplaceTempView("mydonuts")
spark.sql("select \"NCA-15\" as mylabel, count(Donut_Name) as mydonutcount from mydonuts")
.rdd.map((x: Row) => (x.get(0), x.get(1)))
.foreach(println)
}
}
Результат:
(NCA-15,5)