Соедините n элементов после элемента в списке с самим списком - PullRequest
0 голосов
/ 25 февраля 2019

Использование PySpark.

Follow : я думаю, что мне нужно только знать, как выбрать n элементы после элемента в списке, и соединить их с самим списком.

Например, у вас есть список «a», «b», «c», «d», «e», «f», «g»

+-------+-----+
| _index| item|
+-------+-----+
|   0   |   a |
|   1   |   b |
|   2   |   c |
|   3   |   d |
|   4   |   e |
|   5   |   f |
|   6   |   g |
+-------+-----+

с индексом от 0 до 6;и мы хотим объединить, скажем, n=3 элементы после 'c', с самим списком, и мы получим

+--------+-------+-------+
| _index | item1 | item2 |
+--------+-------+-------+
|   3    |   d   |   d   |
|   4    |   e   |   e   |
|   5    |   f   |   f   |
+--------+-------+-------+

Ниже приведен фрагмент связанного кода. Можно ли изменить этот код, чтобы выбрать элементы после A на расстоянии n и объединить их со списком, который содержит A?Я новичок в искре, я хотел бы помочь!Спасибо!


Предположим, у нас много списков.Сначала мы находим элемент в этих списках с некоторым условием condition1.Дайте ему псевдоним A.

Если мы случайно выберем другой элемент после индекса A (в пределах определенного расстояния индекса, скажем, 1-3), а затем соединим его со списком, который содержит A, тогда мы можем сделать следующее.

df.where(
    (col('condition1')==0) # finds an element satisfying some condition, name it as 'A'
).alias('A').join(
    df.alias('B'), 
    # randomly pick another element after 'A' within index distance 1 to 3
    # and join it with the list that contains 'A'
    ((col('A.ListId')==col('B.ListId')) & (random.randint(1,4)+col('A._index'))==col('B._index'))
)

1 Ответ

0 голосов
/ 26 февраля 2019

Вот пример возможного обходного пути, которое вы можете применить:

l = [(0,"a"), (1,"b"), (2,"c"), (3,"d"), (4,"e"), (5,"f"), (6,"g")]
df = spark.createDataFrame(l, schema=["_index", "item"])

# just get the value out of the row
start = df.filter(df.item == "c").select("_index").first()[0]
df.filter((df._index > start) & (df._index <= random.randint(start + 1, start + 4))).show()

Так что я думаю, что единственная часть, которая отсутствовала, кроме вашего объединения, получала целое число из индекса А.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...