У меня есть много структурированных данных, которые хранятся в очень значимом ключе, и я хочу обработать его в одинаковом смысле полный и эффективный способ.Hadoop/Spark Read Многие файлы CSV
+- some-hdfs-path/
+- level-1_var-01/
| +- level-2_var-001.csv
| +- ...
| +- level-2_var-nnn.csv
+- level-1_var-02/
| +- level-2_other-001.csv
| +- ...
| +- level-2_other-mmm.csv
+- .../
+- level-1_var-nn/
| +- ...
Каждый файл имеет размер около 100 МБ и имеет около 1 000 000 строк. Количество файлов, обычно около 100, меняется в каждом каталоге, а также имена файлов. Другими словами, я не знаю, сколько файлов или то, что они называются, но мне нужны их имена и, очевидно, их контент.
У меня возникли проблемы с RDD, с которых я получаю от sc.textFile("/some-hdfs-path/level-1_var-01/*.csv")
и sc.wholeTextFiles("/some-hdfs-path/level-1_var-01")
.
Общая цель - фактически получить первую и последнюю строку из каждого файла в каталогах уровня 1_var /. Объедините результаты для каждого уровня-1_var, затем вернитесь и выпишите весь новый набор файлов для каждого уровня-1_var/в some-other-hdfs-path/level-1-var/
Я новичок в Hadoop/Искра и использование RDD. Я прочитал documentation для вышеупомянутых двух функций, но я все еще запутался в том, как перебирать RDD, которые я получаю и выполняю обработку.
EDIT: файлы содержат данные временных рядов, поэтому объединение содержимого файлов в каждом каталоге нежелательно. Я открыт для добавления содержимого файлов в виде дополнительных столбцов в один гигантский фреймворк данных, но не как строки.
посмотреть на sparkSql или улей для запроса вашей RDD. Его в значительной степени похожи на синтаксис SQL (SELECT * FROM yourRDD LIMIT 1), который получит первую строку. –
, так как я могу выбрать различные файлы, хранящиеся в одном rdd, чтобы запросить их? – Constantine
создайте внешнюю таблицу, где Hive указывает на _some-hdfs-path/_ и используйте 'INPUT__FILE__NAME', чтобы получить фактическое имя файла при запросе данных с помощью SparkSQL или Hive. – cheseaux