How & ldquo; add & rdquo; разделительная колонна для искровой схемы? [Дубликат]

У меня была эта проблема с Дженкинсом. Причина: я переименовал модуль module в Module. Я узнал, что git каким-то образом запутался и сохранил оба каталога module и Module, причем содержимое было распространено между обеими папками. build.gradle хранился в module, но имя модуля было Module, поэтому он не смог найти конфигурацию по умолчанию.

Я исправил его, создав резервную копию содержимого Module, вручную удалив module из репо и восстановления + нажатия на потерянные файлы.

8
задан WoodChopper 11 November 2015 в 13:19
поделиться

3 ответа

sqlContext.read.parquet может принимать несколько путей в качестве входных данных. Если вы хотите просто day=5 и day=6, вы можете просто добавить два пути, например:

val dataframe = sqlContext
      .read.parquet("file:///your/path/data=jDD/year=2015/month=10/day=5/", 
                    "file:///your/path/data=jDD/year=2015/month=10/day=6/")

Если у вас есть папки под day=X, например say country=XX, country будет автоматически добавляется как столбец в dataframe.

EDIT: Начиная с Spark 1.6 необходимо обеспечить «базовый путь» -отвержения, чтобы Spark автоматически генерировал столбцы. В Spark 1.6.x приведенное выше должно быть переписано так, чтобы создать кадр данных с столбцами «данные», «год», «месяц» и «день»:

val dataframe = sqlContext
     .read
     .option("basePath", "file:///your/path/")
     .parquet("file:///your/path/data=jDD/year=2015/month=10/day=5/", 
                    "file:///your/path/data=jDD/year=2015/month=10/day=6/")
33
ответ дан Glennie Helles Sindholt 21 August 2018 в 14:58
поделиться
  • 1
    Первое спасибо за ответ, я искал более простой способ. В случае, если примерно 20 дней как подмножество таким образом будет довольно сложно. Я бы часто фильтровал проверку точности данных. – WoodChopper 11 November 2015 в 18:50
  • 2
    Тогда почему бы просто не сделать val dataframe = sqlContext.read.parquet("file:///your/path/data=jDD/year=2015/month=10/")? день` в качестве столбца в кадре данных, который вы можете затем фильтровать. – Glennie Helles Sindholt 11 November 2015 в 19:18
  • 3
    На самом деле это очень большие данные. Данные с 2007 по 2015 год. В среднем обрабатывается и хранится 5 миллиардов строк журналов. Мне будет предложено представить конкретный отчет по запросу – WoodChopper 11 November 2015 в 19:21
  • 4
    Правильно, так что первое, что вы делаете, это операция filter. Поскольку Spark делает ленивую оценку, у вас не должно быть проблем с размером набора данных. Фильтр будет применяться до любых действий, и только данные, которые вас интересуют, будут храниться в памяти. – Glennie Helles Sindholt 11 November 2015 в 20:05
  • 5
    Кажется, это только ответ! – WoodChopper 26 November 2015 в 09:04

вам необходимо предоставить опцию mergeSchema = true. как показано ниже (это от 1.6.0):

val dataframe = sqlContext.read.option("mergeSchema", "true").parquet("file:///your/path/data=jDD")

Это будет считывать все файлы паркета в dataframe, а также создает столбцы год, месяц и день в данных данных.

Ссылка: https://spark.apache.org/docs/1.6.0/sql-programming-guide.html#schema-merging

4
ответ дан Martin Tournoij 21 August 2018 в 14:58
поделиться
  • 1
    Слияние схем требуется только в том случае, если схема отличается, если они одинаковы, тогда вам это не нужно. – mightymephisto 18 February 2017 в 11:58

Если вы хотите читать несколько дней, например day = 5 и day = 6, и хотите указать диапазон в самом пути, можно использовать подстановочные знаки:

val dataframe = sqlContext
  .read
  .parquet("file:///your/path/data=jDD/year=2015/month=10/day={5,6}/*")

Подстановочные знаки также могут используется для указания диапазона дней:

val dataframe = sqlContext
  .read
  .parquet("file:///your/path/data=jDD/year=2015/month=10/day=[5-10]/*")

Это соответствует всем дням от 5 до 10.

3
ответ дан Neelesh Sambhajiche 21 August 2018 в 14:58
поделиться
Другие вопросы по тегам:

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