2017-01-12 4 views
1

Я знаю, что файлы данных PySpark неизменяемы, поэтому я хотел бы создать новый столбец, полученный в результате преобразования, применяемого к существующему столбцу PySpark DataFrame. Мои данные слишком велики, чтобы использовать collect().Удалить элемент из столбца данных PySpark DataFrame

Колонок в вопросе является списком списков уникальных Интсов (без повторов в междунар в данном списке), например:

[1] 
[1,2] 
[1,2,3] 
[2,3] 

Вышеуказанной игрушка примером, так как мой фактический DataFrame имеет списки с максимальной длиной 52 уникальных ints. Я хотел бы создать столбец, который выполняет итерацию по списку списков int и удаляет один элемент для каждого цикла. Элемент, который нужно удалить, будет одним из множества уникальных элементов во всех списках, который в этом случае равен [1,2,3].

Так что для первой итерации:

Remove элемента 1, так что результаты являются:

[] 
[2] 
[2,3] 
[2,3] 

Для второй итерации:

Remove элемента 2, таким образом, что результаты являются:

[1] 
[1] 
[1,3] 
[3] 

и т. Д. И повторить выше с элементом 3.

Для каждой итерации я хотел бы добавить результаты в исходный файл PySpark DataFrame для запуска некоторых запросов, используя этот «фильтрованный» столбец в качестве фильтра строк для исходного DataFrame.

Мой вопрос в том, как преобразовать столбец DataSpark в файл PySpark в список? Мой набор данных большой, поэтому df.select('columnofintlists').collect() приводит к проблемам с памятью (например: Kryo serialization failed: Buffer overflow. Available: 0, required: 1448662. To avoid this, increase spark.kryoserializer.buffer.max value.).

ответ

0

df.toLocalIterator() возвращает итератор для цикла

Смежные вопросы