Игнорировать пустые папки при чтении с помощью Spark wholeTextFiles [duplicate]

Я не знаю вашей конкретной потребности в этом, но если вы также используете .NET, не могли бы вы использовать Html Agility Pack ?

Выдержка:

Это библиотека .NET-кода, которая позволяет анализировать HTML-файлы вне Интернета. Синтаксический анализатор очень толерантен с искаженным HTML «реальным миром».

4
задан user7379562 3 February 2017 в 15:02
поделиться

2 ответа

Если вы используете Spark, вы можете сделать это с помощью wilcards следующим образом:

scala>sc.textFile("path/*/*")

sc - это SparkContext, который, если вы используете искровую оболочку, инициализируется по умолчанию или если вы создаете свой для собственной программы должен быть установлен экземпляр SparkContext.

Будьте осторожны со следующим флагом:

scala> sc.hadoopConfiguration.get ("mapreduce.input.fileinputformat.input.dir.recursive") res6: String = null

Yo должен установить этот флаг в значение true:

sc.hadoopConfiguration.set ("mapreduce.input.fileinputformat.input.dir.recursive", "true")

7
ответ дан dbustosp 16 August 2018 в 10:55
поделиться
  • 1
    Итак, вы имеете в виду, что я могу просто это сделать? val myRDD = sc.textFile("path/*/*")? Не нужно использовать setInputDirRecursive? Получу ли я RDD String? (Мне нужно RDD строки) – user7379562 3 February 2017 в 18:42
  • 2
    Да, точно. Это будет загружаться как String по умолчанию, и если вы используете подстановочные знаки, вы не будете использовать этот флаг. – dbustosp 3 February 2017 в 20:04
  • 3
    Хорошо, еще одна вещь, которую я неправильно понимаю: если данные в файлах Hadoop имеют формат JSON, я получу RDD строк JSON после выполнения sc.textFile(...), правильно? Затем, чтобы преобразовать его в DataFrame, этот подход будет работать ?: val rddFromHadoop = sc.textFile("path/*/*") import sqlContext.implicits._ var df = rddFromHadoop.toDF(). Или я должен анализировать rddFromHadoop до RDD[Map[String,String]] перед применением toDF()? Извините, за этот дополнительный вопрос. Для меня просто важно понять, что мой общий подход будет работать, если я буду использовать textFile и читать файлы хаопиша в RDD. – user7379562 3 February 2017 в 21:36
  • 4
    Это другой вариант использования. Вместо этого вы должны использовать SqlContext, этот класс содержит поддержку чтения json-файлов. Взгляните на: databricks.com/blog/2015/02/02/… – dbustosp 3 February 2017 в 21:50
  • 5
    Ах, подождите, вы имеете в виду это ?: var df = sqlContext.read.json("path/*/*"), предполагая, что у меня есть данные в подпапках, но эти данные hadoopish были сохранены из RDD строк JSON (rdd.saveAsTextFile(filePath)). Если это так, это действительно здорово. – user7379562 3 February 2017 в 21:58

Я обнаружил, что параметры должны быть установлены следующим образом:

.set("spark.hive.mapred.supports.subdirectories","true")
.set("spark.hadoop.mapreduce.input.fileinputformat.input.dir.recursive","true")
1
ответ дан Paul 16 August 2018 в 10:55
поделиться
Другие вопросы по тегам:

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