在Spark Scala中使用DATASet Api



嗨,我是spark/Scala的新手,正在尝试实现一些功能。我的要求很简单。我必须使用数据集API执行所有操作。

问题1:我将csv转换为案例类?这是将数据帧转换为数据集的正确方法吗??我做得对吗?

此外,当我试图对orderItemFile1进行转换时,对于过滤器/映射操作,我可以使用_.order_id进行访问。但groupBy 没有发生同样的情况

case class  orderItemDetails (order_id_order_item:Int, item_desc:String,qty:Int,   sale_value:Int)
val orderItemFile1=ss.read.format("csv")
.option("header",true)
.option("infersSchema",true)
.load("src/main/resources/Order_ItemData.csv").as[orderItemDetails]
orderItemFile1.filter(_.order_id_order_item>100) //Works Fine
orderItemFile1.map(_.order_id_order_item.toInt)// Works Fine
//Error .Inside group By I am unable to  access it as _.order_id_order_item. Why So?
orderItemFile1.groupBy(_.order_id_order_item) 
//Below Works..But How this will provide compile time safely as committed 
//by DataSet Api.I can pass any wrong column name also here and it will be //caught only on run time
orderItemFile1.groupBy(orderItemFile1("order_id_order_item")).agg(sum(orderItemFile1("item_desc")))

也许您正在寻找的功能是#groupByKey。请参阅此处的示例。

至于您的第一个问题,基本上是的,您正在将CSV读取为Dataset[A],其中A是您声明的case类。

最新更新