让我们有以下输入样本数据:
people.txt -> saved at HDFS under /tests/people.txt
1,Jerry,man,USA |
peoples orders -> saved at HDFS under /tests/orders.txt
1,pizza,2500 |
让我们训练一下Apache Spark SQL
1.从组中取最大行。
任务:为people.txt中的每一行获取最昂贵的订单。结果格式:name, country, price.
case class people(id: Int, name: String, gender: String, country: String); |
Zeppelin output:
defined class people |
这很简单,因为我们不需要任何额外的数据来获得最大价格订单。
2. LEFT JOIN测试
任务:从people.txt获取所有没有订购的行。
case class people(id: Int, name: String, gendre: String, country: String); |
Zeppelin output:
defined class people |
经典LEFT JOIN的东西,从左边的表得到一切,无需引用右表。
3. 从GROUP中获取前N行
现在好玩的开始了!
任务:
在people.txt给我前两个最昂贵的订单每一行。
import org.apache.spark.sql.expressions.Window; |
Zeppelin output:
import org.apache.spark.sql.expressions.Window |
- 窗口函数按人员ID分区订单,从而导致创建组。我们按价格下降了这些组。
- 通过row_number()函数,我们索引了组中的每一行。
- 在where函数中,我们仅限制组中前两行的数据帧。
- 最后的结果DF只是以请求的格式打印。
点击标题见原文!