如何在执行spark数据集中的函数时保留顺序

时间:2018-04-03 07:30:49

标签: apache-spark

我必须对spark数据集应用一些限制,并且必须创建spark数据集的子集,并且需要从该数据集中提取一行。我通过使用,除了和限制数据集的功能来实现这个逻辑。这里的问题是当我使用时,除了数据集的顺序已被更改。对于我的逻辑,保留订单是imp。

EG。我的数据集是:数据集有3行

巧克力 冰淇淋 软饮料

我想要获取冰淇淋,当我申请限制时,除了我得到我的子集

软饮料 冰淇淋

它将为我提供SoftDrinks(将子集转换为Java列表并将获取列表的第一个元素)

或者有没有办法通过只传递索引来获取数据集中的行?像 dataset.get(0)

1 个答案:

答案 0 :(得分:0)

一般情况下,您无法使用expcept保留订单,因为这是一项需要随机播放的操作。在某些情况下(小参考),您可以使用broadacst join或bloom过滤器来实现类似的效果。

然而,在排序方面考虑Datasets,除非用orderBy明确强制执行命令,这是一个巨大的错误。一般来说,Dataset与关系一样,是无序的。所以,如果

  

对于我的逻辑,保留订单是imp。

你正在寻找一个错误的工具。

相同的:

  

通过仅传递索引??

来获取数据集中的行

是不可能的,因为Dataset没有索引概念。