У использования dataframe udf есть проблема, вызванная разделом - PullRequest
0 голосов
/ 02 июля 2019

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

df = sqlCtx.createDataFrame(
    [
        (1, 1, 'A', '2017-01-01'),
        (2, 3, 'B', '2017-01-02'),
        (3, 5, 'A', '2017-01-03'),
        (4, 7, 'B', '2017-01-04')
    ],
    ('index', 'X', 'label', 'date')
)
data=df.rdd.map(lambda x:x['label']).collect()
def ad(x):
    return data.pop(0).lower()
AD=F.udf(ad,StringType())
df.withColumn('station',AD('label')).select('station').rdd.flatMap(lambda x:x).collect()

вот вывод:

['a', 'a', 'a', 'a']

, который должен быть:

['a', 'b', 'a', 'b']

И самое странное, что

data

недаже изменить после вызова функции

data.pop(0)

1 Ответ

0 голосов
/ 12 июля 2019

Ну, получается, когда количество разделов увеличивается, функция будет применяться к каждому разделу с одинаковым

data

, что означает, что данные глубоко скопированы и не будут изменены.

Каждый раз, когда мы используем F.udf, он копирует каждую переменную внутри функции.

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