Потеря данных при сохранении фрейма данных Spark в паркетном формате - PullRequest
0 голосов
/ 06 мая 2020

У меня есть файл данных csv, который я могу загрузить в pyspark:

spark = SparkSession.builder.master("local").appName("MYAPP").getOrCreate()```

df = spark.read.csv( path = csvfilepath, sep="|", schema=my_schema, nullValue="NULL", mode="DROPMALFORMED")```

Проверка количества строк в фрейме данных дает примерно 20 миллионов строк.

df.count()

I повторно сохраняю мой фрейм данных в паркете:

df.write.mode("overwrite").parquet( parquetfilepath )

Затем я загружаю данные паркета:

df = spark.read.parquet( parquetfilepath )

Теперь, когда я считаю строки (df.count()), я получаю только 3 миллиона ряды.

Почему я потерял 85% строк и как решить эту проблему? Я также пытался использовать «повторное разбиение» и «объединение» при создании данных паркета с тем же результатом.

1 Ответ

0 голосов
/ 28 мая 2020

Я отвечаю на свой вопрос, так как теперь понял, в чем проблема. На самом деле это очень простая ошибка новичка. Причина того, что я теряю данные, проста в том, что я попросил об этом при чтении df с опцией mode = "DROPMALFORMED". Когда я подсчитываю строки рамки даты, я обнаруживаю, что это 20 миллионов строк, но некоторые из них несовместимы со схемой и отбрасываются, когда данные фактически записываются на диск (то есть отбрасывание искаженных строк, которые я запрашивал, когда чтение CSV отложено до этого момента). Чего я не понимал, так это того, что в моих данных были ошибки.

...