Эквивалент pandas применять в писпарке? - PullRequest
0 голосов
/ 04 апреля 2020

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

Например, в Pandas у меня есть функция apply, которая принимает грязный домен, например sub-subdomain.subdomain.facebook.co.nz/somequerystring, и просто выводит facebook.com.

Как бы я это сделал в Spark?

Я посмотрел на UDF, но мне не ясно, как я могу запустить его на одном столбце.

Допустим, у меня есть простая функция, подобная приведенной ниже, где я извлекаю разные биты даты из столбца pandas DF:

def format_date(row):
    year = int(row['Contract_Renewal'][7:])
    month = int(row['Contract_Renewal'][4:6])
    day = int(row['Contract_Renewal'][:3])
    date = datetime.date(year, month, day)
    return date-now

В Pandas Я бы назвал это следующим образом:

df['days_until'] = df.apply(format_date, axis=1)

Могу ли я добиться того же в Pyspark?

1 Ответ

0 голосов
/ 05 апреля 2020

В этом сценарии вы можете использовать комбинацию regexp_extract (http://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=substring#pyspark. sql .functions.regexp_extract ), regexp_replace (http://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=substring#pyspark). sql .functions.regexp_replace ) и split (http://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=substring#pyspark. sql .functions.split ) для переформатирования даты строк.

Это не так же чисто, как определение собственной функции и использование apply, как Pandas, но оно должно быть более производительным, чем определение UDF для Pandas / Spark.

Удачи!

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