pyspark добавляет очень большие множественные числовые кадры после каждого процесса в цикле for (например: добавляет после ежедневного ETL)

Давайте посмотрим два эффективных способа, которые касаются экранированных кавычек. Эти шаблоны не предназначены для краткости и эстетики, но для эффективности.

Эти способы используют первую распознавание символов для быстрого поиска котировок в строке без затрат на чередование. (Идея состоит в том, чтобы быстро отбросить символы, которые не являются кавычками, без проверки двух ветвей чередования.)

Содержимое между кавычками описывается с развернутым контуром (вместо повторное чередование): [^"\\]*(?:\\.[^"\\]*)*

Очевидно, чтобы иметь дело со строками, которые не имеют сбалансированных кавычек, вместо этого вы можете использовать собственные квантификаторы: [^"\\]*+(?:\\.[^"\\]*)*+ или обходной путь для имитации их, чтобы предотвратить слишком много назад. Вы также можете выбрать, что цитируемая часть может быть открывающей цитатой до следующей (неэкспертированной) цитаты или конца строки. В этом случае нет необходимости использовать притяжательные квантификаторы, вам нужно только сделать последнее предложение необязательным.

Обратите внимание: иногда кавычки не экранируются с обратной косой чертой, а повторяя цитату. В этом случае подшаблон содержимого выглядит следующим образом: [^"]*(?:""[^"]*)*

Образцы избегают использования группы захвата и обратной ссылки (я имею в виду что-то вроде (["']).....\1) и используйте простое чередование, но с ["'] в начале, в коэффициенте.

Perl like:

["'](?:(?<=")[^"\\]*(?s:\\.[^"\\]*)*"|(?<=')[^'\\]*(?s:\\.[^'\\]*)*')

(обратите внимание, что (?s:...) является синтаксическим сахаром для переключения в режиме «dotall / singleline» внутри группы, не содержащей захвата. Если этот синтаксис не поддерживается, вы можете легко включить этот режим для всего шаблона или заменить точку на [\s\S])

(Способ написания этого шаблона полностью «ручным» и не учитывает возможные внутренние оптимизации двигателя)

Сценарий ECMA:

(?=["'])(?:"[^"\\]*(?:\\[\s\S][^"\\]*)*"|'[^'\\]*(?:\\[\s\S][^'\\]*)*')

POSIX extended:

"[^"\\]*(\\(.|\n)[^"\\]*)*"|'[^'\\]*(\\(.|\n)[^'\\]*)*'

или просто:

"([^"\\]|\\.|\\\n)*"|'([^'\\]|\\.|\\\n)*'
0
задан Jahnab Kumar Deka 13 July 2018 в 12:12
поделиться

1 ответ

Ответа на этот вопрос PySpark

Поместить все DataFrames в список

df_list = [df1, df2, df3, df4]
finaldf = reduce(lambda x, y: x.union(y), df_list)

finaldf будет содержать все данные.

0
ответ дан Pramod Sripada 17 August 2018 в 12:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: