Удаление строк из кадра данных искры на основе условия - PullRequest
0 голосов
/ 30 апреля 2019

Я хочу отбросить строки из искробезопасного списка данных, основанного на условии. Условием является длина списка определенной длины.

Я попытался преобразовать его в список списков, а затем использовать цикл for (продемонстрировано ниже), но я надеюсь сделать это в одном выражении внутри spark и просто создать новый неизменный df из исходного df на основе этого состояние.

newList = df2.values.tolist()

finalList = []

for subList in newList:
    if len(subList) < 4:
        finalList.append(subList)


Так, например, если фрейм данных представляет собой фрейм данных с одним столбцом, а столбец называется последовательностями, он выглядит следующим образом:

sequences
____________
[1, 2, 4]
[1, 6, 3]
[9, 1, 4, 6]

Я хочу отбросить все строки, длина списка которых больше 3, в результате чего:

sequences
____________
[1, 2, 4]
[1, 6, 3]

1 Ответ

1 голос
/ 30 апреля 2019

Вот один подход в Spark> = 1.5 с использованием встроенной функции size:

from pyspark.sql import Row
from pyspark.sql.functions import  size

df = spark.createDataFrame([Row(a=[9, 3, 4], b=[8,9,10]),Row(a=[7, 2, 6, 4], b=[2,1,5]), Row(a=[7, 2, 4], b=[8,2,1,5]), Row(a=[2, 4], b=[8,2,10,12,20])])

df.where(size(df['a']) <= 3).show()

Выход:

+---------+------------------+
|        a|                 b|
+---------+------------------+
|[9, 3, 4]|        [8, 9, 10]|
|[7, 2, 4]|      [8, 2, 1, 5]|
|   [2, 4]|[8, 2, 10, 12, 20]|
+---------+------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...