Spark очень медленная работа с широким набором данных - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть небольшой паркетный файл (7,67 МБ) в HDFS, сжатый с помощью Snappy. Файл имеет 1300 строк и 10500 столбцов, все двойные значения. Когда я создаю фрейм данных из файла паркета и выполняю простую операцию, такую ​​как подсчет, это занимает 18 секунд.

scala> val df = spark.read.format("parquet").load("/path/to/parquet/file")
df: org.apache.spark.sql.DataFrame = [column0_0: double, column1_1: double ... 10498 more fields]

scala> df.registerTempTable("table")

scala> spark.time(sql("select count(1) from table").show)
+--------+
|count(1)|
+--------+
|    1300|
+--------+

Time taken: 18402 ms

Можно ли что-нибудь сделать для улучшения производительности широких файлов?

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

При работе с фреймом данных может потребоваться выбрать только те столбцы, которые вас интересуют (т. Е. Df.select (columns ...)) перед выполнением агрегации. Это может значительно сократить размер вашего набора. Кроме того, если необходимо выполнить какую-либо фильтрацию, сначала сделайте это также.

0 голосов
/ 02 февраля 2019

Я считаю этот ответ, который может быть полезен для вас.

Spark SQL не подходит для обработки широких данных (номер столбца> 1 КБ).Если это возможно, вы можете использовать вектор или столбец карты для решения этой проблемы.

0 голосов
/ 12 сентября 2018

Эй, рад, что вы здесь, в сообществе,

Подсчет - это ленивая операция. Подсчет, покажите, что все эти операции стоят дорого, поскольку они работают над каждой записью, поэтому их использование всегда будет занимать много времени.вместо этого вы можете записать результаты обратно в файл или базу данных, чтобы сделать это быстрее, если вы хотите проверить результат, вы можете использовать DF.printSchema() Простой способ проверить, есть ли в кадре данных строки, это сделать Try(df.head).Если Успех, то есть хотя бы одна строка в кадре данных.Если сбой, то фрейм данных пуст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...