我有一个spark数据集,格式如下:
Id dataset
id1,[name1,name2,name3...name100]
id2,[name1,name2,name3,nam4....name100000]
id3,[name1,name2,name3.....name1000]
我想为每个id随机抽取50%的名称样本。我知道spark有一个sample函数。但是我可以根据数据集的每一行将百分比传递给它吗?每一行的名称计数将不同。
这就是我尝试过的:
WindowSpec window = Window.partitionBy(col("id")).orderBy(functions.rand());
idDataset.select(col("name"), functions.rank().over(window).alias("rank"))
.filter(functions.col("rank") = .05 ).drop("rank");
这里的0.05意味着我需要为每个id随机抽取50%的名字样本。
1条答案
按热度按时间vu8f3i0k1#
一种选择是使用内置的sql函数。
您可以使用transform为每个名称指定一个介于0.0和1.0之间的随机值,然后过滤掉随机数大于阈值(本例中为0.5)的所有名称。
输出: