[英]Transform rows to columns in Spark Scala SQL
我有一个数据库表,其中包含唯一的用户ID和单击的项目。
例如
用户ID,项目ID
1、345
1,78993
1,784
5、345
5、897
15,454
我想使用Spark SQL将数据转换为以下格式(如果可能,在Scala中)
用户ID,项目ID
1,345,78993,784
5、345,897
15,454
谢谢,
本地示例:
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.functions._
object Main extends App {
case class Record(user: Int, item: Int)
val items = List(
Record(1 , 345),
Record(1 , 78993),
Record(1 , 784),
Record(5, 345),
Record(5, 897),
Record(15, 454)
)
val sc = new SparkContext(new SparkConf().setAppName("test").setMaster("local"))
val hiveContext = new HiveContext(sc)
import hiveContext.implicits._
import hiveContext.sql
val df = sc.parallelize(items).toDF()
df.registerTempTable("records")
sql("SELECT * FROM records").collect().foreach(println)
sql("SELECT user, collect_set(item) From records group by user").collect().foreach(println)
}
这将产生:
[1,ArrayBuffer(78993, 784, 345)]
[5,ArrayBuffer(897, 345)]
[15,ArrayBuffer(454)]
这是一个非常简单的groupByKey
场景。 尽管如果您想在此之后做其他事情,那么我建议使用更高效的PairRDDFunction
因为groupByKey
对于后续查询效率不高。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.