如何从Scala中的原始数据帧中提取子集Spark数据帧?

时间:2018-08-02 07:51:36

标签: scala apache-spark dataframe

我有以下数据框(结果为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.0结束并创建另一个数据帧(1638844464| 570.0),即df1.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行?

1 个答案:

答案 0 :(得分:0)

由于数据集没有排序并且没有其他可以筛选的有序道具,所以我建议您创建一列monotonically_increasing_id,然后在id的上下边界之间获取所需字段