Какой самый быстрый способ конвертировать Parquet в обычный TEXT файл?

Строка "keyup" помечена как токен NAME: это проблема.

Вы должны понимать, что лексер работает независимо от анализатора. Если синтаксический анализатор пытается сопоставить токен KEYPRESS, лексер не «слушает» его, а просто строит токен, следуя правилам:

  1. соответствует правилу, которое потребляет большинство символов
  2. , если существует больше правил, совпадающих с одинаковым количеством символов, выберите тот, который определен первым

Принимая во внимание эти правила и порядок ваших правил :

NAME : [A-Za-z_][A-Za-z_0-9]* ;

INT : [0-9]+ ;

KEY : [a-z] | [0-9] | 'shift' | 'ctrl' | 'alt' | 'meta' | 'space' | 'left' | 'right' | 'up' | 'down' | 'minus' | 'equals' | 'backspace' | 'openbracket' | 'closebracket' | 'backslash' | 'semicolon' | 'quote' | 'enter' | 'comma' | 'period' | 'slash' ;

KEYPRESS : 'keyup' | 'keydown' ;

маркер NAME будет создан до большей части альтернатив KEY, и все альтернативы KEYPRESS будут созданы.

И поскольку INT соответствует одной или нескольким цифрам и определен до KEY, который также имеет альтернативу с одной цифрой, ясно, что лексер никогда не будет генерировать KEY или KEYPRESS токен.

Если вы переместите правило NAME и INT ниже правил KEY и KEYPRESS, то большинство токенов будут построены так, как вы ожидаете, это мое предположение.

EDIT

Возможное решение будет выглядеть так:

KEY : [a-z] | 'shift' | 'ctrl' | 'alt' | 'meta' | 'space' | 'left' | 'right' | 'up' | 'down' | 'minus' | 'equals' | 'backspace' | 'openbracket' | 'closebracket' | 'backslash' | 'semicolon' | 'quote' | 'enter' | 'comma' | 'period' | 'slash' ;

KEYPRESS : 'keyup' | 'keydown' ;

NAME : [A-Za-z_][A-Za-z_0-9]* ;

SINGLE_DIGIT : [0-9] ;

INT : [0-9]+ ;

Т.е. Я удалил альтернативу [0-9] из KEY и ввел правило SINGLE_DIGIT (которое помещено перед правилом INT!).

Теперь создайте дополнительный парсер rules:

integer : INT | SINGLE_DIGIT ;

key : KEY | SINGLE_DIGIT ;

и изменить все вхождения INT внутри правил синтаксического анализа на integer (не вызывать ваше правило int: это зарезервированное слово) и изменить все KEY к key.

И вы также можете сделать что-то похожее на NAME и альтернативу [a-z] в KEY (т. е. один символ нижнего регистра теперь никогда не будет обозначаться как NAME ], всегда как KEY).

0
задан Joe 5 March 2019 в 12:36
поделиться

1 ответ

Вы можете попробовать использовать Python с пандами и пиарроу:

import pandas as pd
df = pd.read_parquet('input.parquet')
df.to_csv('out.csv', index=False)             # Exporting to CSV is easy
df.to_csv('out.txt', index=False, sep=' ')    # Text is just a tad more difficult
df.to_csv('out.txt', index=False, sep='\t')   # Alternatively, you can use tab separators
df.to_json('out.json')                        # Exporting to JSON is easy as well

См. Соответствующие документы по API:

Вы также можете изменить код выше, чтобы использовать fastparquet вместо pyarrow и проверить, дает ли это вам лучшую или худшую производительность. Все, что вам нужно изменить, - это строка, которая читает файл паркета:

df = pd.read_parquet('input.parquet', engine = 'fastparquet')

Не забудьте сначала установить pandas, pyarrow и fastparquet с помощью команды pip install pandas pyarrow fastparquet (или аналогичной, в зависимости от вашего решения по управлению пакетами ). [1 110]

0
ответ дан Zoltan 5 March 2019 в 12:36
поделиться
Другие вопросы по тегам:

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