Я пытался написать файл паркета с дельта-кодировкой. На этой странице указано, что паркет поддерживает три типа дельта-кодирования:
(DELTA_BINARY_PACKED, DELTA_LENGTH_BYTE_ARRAY, DELTA_BYTE_ARRAY).
Поскольку spark
, pyspark
или pyarrow
не позволяют нам указать метод кодирования, Мне было любопытно, как можно написать файл с включенным дельта-кодированием?
Однако я обнаружил в inte rnet, что если у меня есть столбцы с паркетом типа TimeStamp
, то будет использоваться дельта-кодирование. Поэтому я использовал следующий код в scala
для создания файла паркета. Но кодировка не является дельтой.
val df = Seq(("2018-05-01"),
("2018-05-02"),
("2018-05-03"),
("2018-05-04"),
("2018-05-05"),
("2018-05-06"),
("2018-05-07"),
("2018-05-08"),
("2018-05-09"),
("2018-05-10")
).toDF("Id")
val df2 = df.withColumn("Timestamp", (col("Id").cast("timestamp")))
val df3 = df2.withColumn("Date", (col("Id").cast("date")))
df3.coalesce(1).write.format("parquet").mode("append").save("date_time2")
parquet-tools
показывает следующую информацию относительно записанного файла паркета.
file schema: spark_schema
--------------------------------------------------------------------------------
Id: OPTIONAL BINARY L:STRING R:0 D:1
Timestamp: OPTIONAL INT96 R:0 D:1
Date: OPTIONAL INT32 L:DATE R:0 D:1
row group 1: RC:31 TS:1100 OFFSET:4
--------------------------------------------------------------------------------
Id: BINARY SNAPPY DO:0 FPO:4 SZ:230/487/2.12 VC:31 ENC:RLE,PLAIN,BIT_PACKED ST:[min: 2018-05-01, max: 2018-05-31, num_nulls: 0]
Timestamp: INT96 SNAPPY DO:0 FPO:234 SZ:212/436/2.06 VC:31 ENC:RLE,BIT_PACKED,PLAIN_DICTIONARY ST:[num_nulls: 0, min/max not defined]
Date: INT32 SNAPPY DO:0 FPO:446 SZ:181/177/0.98 VC:31 ENC:RLE,PLAIN,BIT_PACKED ST:[min: 2018-05-01, max: 2018-05-31, num_nulls: 0]
Как видите, ни один столбец не использовал дельта-кодирование.
Мои вопросы:
Как мне написать файл паркета с дельта-кодированием? (Если вы можете предоставить пример кода в scala
или python
, это было бы здорово.)
Как решить, какую «дельта-кодировку»: (DELTA_BINARY_PACKED,
DELTA_LENGTH_BYTE_ARRAY, DELTA_BYTE_ARRAY)
использовать?