Я использую скрипт на 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 для параллельных вычислений?