Использование python UDF в pyspark с использованием распределенных вычислений - PullRequest
0 голосов
/ 24 октября 2019

Я использую скрипт на Python для декодирования строки Соглашения GDPR. Для этого прежде всего я устанавливаю декодер согласия, используя

sudo pip install consent-decoder  -i https://testpypi.python.org/pypi

Теперь я написал небольшой скрипт на python для декодирования строки согласия из файла данных. Сценарий

from  consent_decoder.run import *
import sys
import datetime
for line in sys.stdin:
line = line.strip()
items = line.split('\t')
try:
    all_fields = all(items[-1]) #passing the last item from the list which should be consent string.
    items.append(str(all_fields.cmpVersion))
    items.append(str(all_fields.allowedPurposeIds))
    items.append(str(all_fields.allowedVendorIds))
    print '\t'.join(items)
except:
    print line

''' 

use variable names from here-
1   version
2   cmpId
3   cmpVersion
4   vendorListVersion
5   allowedPurposeIds
6   maxVendorId
7   recordCreatedDate
8   recordUpdatedDate
9   consentScreen
10  consentLanguage
11  allowedVendorIds

''' 

Теперь я использую Hive для запуска этого UDF

ADD FILE decoder.py;
Select TRANSFORM(col1,col2,consent) Using 'decoder.py' as col1,col2,consent,cmp_version,allowedpurpose,allowedvendorid from table;

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

Есть ли способ ускорить процесс или как преобразовать UDF в pyspark? UDF для параллельных вычислений?

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