首页 > 解决方案 > 如何从 Scala 中的原始数据帧中提取子集 Spark 数据帧?

问题描述

我有以下数据框(结果df.show()):

  auctionid|   bid|   bidtime|           bidder|bidderrate|openbid|
|1638843936| 500.0|0.47836804|        kona-java|       181|  500.0
|1638843936| 800.0| 0.8263889|           doc213|        60|  500.0
|1638843936| 600.0| 3.7611227|             zmxu|         7|  500.0
|1638843936|1500.0| 5.2263775|      carloss8055|         5|  500.0
|1638843936|1600.0|  6.570625|          jdrinaz|         6|  500.0
|1638843936|1550.0| 6.8929167|      carloss8055|         5|  500.0
|1638843936|1625.0| 6.8931136|      carloss8055|         5|  500.0
|1638844464| 300.0| 1.8111342|          aprefer|        58|  300.0
|1638844464| 305.0| 3.2126737|        19750926o|         3|  300.0
|1638844464| 450.0| 4.1657987|         coharley|        30|  300.0
|1638844464| 450.0| 6.7363195|        adammurry|         5|  300.0
|1638844464| 500.0| 6.7364697|        adammurry|         5|  300.0
|1638844464|505.78| 6.9881945|        19750926o|         3|  300.0
|1638844464| 551.0| 6.9896526|        19750926o|         3|  300.0
|1638844464| 570.0| 6.9931483|        19750926o|         3|  300.0
|1638844464| 601.0| 6.9939003|        19750926o|         3|  300.0
|1638844464| 610.0|  6.994965|        19750926o|         3|  300.0
|1638844464| 560.0| 6.9953704|            ps138|         5|  300.0

我想从使用 Scala Spark 开始和结束创建另一个数据帧 ( df1) ,即应该显示:1638843936|1550.01638844464| 570.0df1.show()

|1638843936|1550.0| 6.8929167|      carloss8055|         5|  500.0
|1638843936|1625.0| 6.8931136|      carloss8055|         5|  500.0
|1638844464| 300.0| 1.8111342|          aprefer|        58|  300.0
|1638844464| 305.0| 3.2126737|        19750926o|         3|  300.0
|1638844464| 450.0| 4.1657987|         coharley|        30|  300.0
|1638844464| 450.0| 6.7363195|        adammurry|         5|  300.0
|1638844464| 500.0| 6.7364697|        adammurry|         5|  300.0
|1638844464|505.78| 6.9881945|        19750926o|         3|  300.0
|1638844464| 551.0| 6.9896526|        19750926o|         3|  300.0
|1638844464| 570.0| 6.9931483|        19750926o|         3|  300.0

我尝试了以下代码:

val df1=df.filter(df("auctionid")===1638843936 && df("bid")===1550.0**) 

但这只是给我一个单一的价值。我该怎么做才能让所有的1638844464| 570.0行都排到行上?

标签: scalaapache-sparkdataframe

解决方案


由于数据集没有排序并且它没有任何其他可以过滤的有序道具,我建议您创建另一列 monotonically_increasing_id ,然后在 id 的上限和下限之间获取所需的字段


推荐阅读