Использование карты для создания фрейма данных приводит к ошибке Pickling - PullRequest
0 голосов
/ 15 июня 2019

Для некоторого фона я пытаюсь сопоставить строки в одном кадре данных (df1) с аналогичными строками в другом кадре данных (df2).Я хочу в итоге получить фрейм данных, который имеет каждую строку из df1 и копию строк df2 для каждой строки.

Например, у меня есть 2 фрейма данных, созданных так:

  df1     df2
+-----+ +-----+
|value| |value|
+-----+ +-----+
|    0| |    2|
|    1| |    3|
+-----+ +-----+

(это pyspark.sql.dataframe.DataFrame фреймы данных)
Конечный фрейм данных должен выглядеть следующим образом:

+-----+
|value|
+-----+
|    0| <- from df1
|    2| <- clone of df2
|    3|
|    1| <- from df1
|    2| <- clone of df2
|    3|
+-----+

Я пытаюсь создать этот фрейм данных с помощью карты и объединения.Первым шагом, который я попытался, было создать список дубликатов df2, который я мог бы затем объединить с df1, чтобы создать желаемый фрейм данных.

def foo(row):
  return df2.limit(2)

listOfCopies = df1.rdd.map(foo)
print(listOfCopies.take(2))

Я ожидал, что вывод listOfCopies.take(2) будет списком из 2-х фреймов данных, однако вместо этого я получаю ошибку PicklingError: Could not serialize object: TypeError: 'JavaPackage' object is not callable

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 20 июня 2019

Как прокомментировал PMende, я не смог найти способ работать с df2 из отображения функции df1.Вместо этого я использовал серию соединений для выполнения этой задачи.

Функция конвейера ML Spark approxSimilarityJoin делает то, что я хочу, хотя она предназначена для случаев, когда df1 и df2 имеют сравниваемый столбец, такой как строка или хеш.

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