Создать список файлов hdfs из RemoteIterator [duplicate]

На самом деле Chrome более гибкий, чтобы иметь дело с различными строковыми форматами. Даже если вы не знаете его формат String, Chrome по-прежнему может успешно преобразовывать String в Date без ошибок. Например:

  var outputDate = new Date(Date.parse(inputString));

Но для Firefox и Safari все становится более сложным. Фактически, в документе Firefox он уже говорит: ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse )

Строка, представляющая дату RFC2822 или ISO 8601 (могут использоваться другие форматы, но результаты могут быть неожиданными).

Итак, когда вы хотите использовать Date. проанализируйте в Firefox и Safari, вы должны быть осторожны. Для меня я использую метод трюков, чтобы справиться с этим. (Примечание: это может быть не всегда правильно для всех случаев)

if (input.indexOf("UTC") != -1) {
  var tempInput = inputString.substr(0, 10) + "T" + inputString.substr(11, 8) + "Z";
  date = new Date(Date.parse(tempInput));
}

Здесь он конвертирует 2013-08-08 11:52:18 UTC в 2013-08-08T11: 52: 18Z сначала, и то его формат является подходящим словом в документе Firefox. На данный момент Date.parse всегда будет в любом браузере.

3
задан Anju 25 September 2015 в 03:50
поделиться

3 ответа

sc.wholeTextFiles (путь) должен помочь. Он дает rdd (filepath, filecontent).

0
ответ дан Huy Banh 23 August 2018 в 19:49
поделиться

Это то, что в конечном итоге сработало для меня:

import org.apache.hadoop.fs._
import org.apache.spark.deploy.SparkHadoopUtil
import java.net.URI

val hdfs_conf = SparkHadoopUtil.get.newConfiguration(sc.getConf)
val hdfs = FileSystem.get(hdfs_conf)
// source data in HDFS
val sourcePath = new Path("/<source_location>/<filename_pattern>")

hdfs.globStatus( sourcePath ).foreach{ fileStatus =>
   val filePathName = fileStatus.getPath().toString()
   val fileName = fileStatus.getPath().getName()

   // < DO STUFF HERE>

} // end foreach loop
1
ответ дан Jaime 23 August 2018 в 19:49
поделиться

Я не тестировал его полностью, но похоже что-то вроде этого:

import org.apache.spark.deploy.SparkHadoopUtil
import org.apache.hadoop.fs.{FileSystem, Path, LocatedFileStatus, RemoteIterator}
import java.net.URI

val path: String = ???

val hconf = SparkHadoopUtil.get.newConfiguration(sc.getConf)
val hdfs = FileSystem.get(hconf)
val iter = hdfs.listFiles(new Path(path), false)

def listFiles(iter: RemoteIterator[LocatedFileStatus]) = {
  def go(iter: RemoteIterator[LocatedFileStatus], acc: List[URI]): List[URI] = {
    if (iter.hasNext) {
      val uri = iter.next.getPath.toUri
      go(iter, uri :: acc)
    } else {
      acc
    }
  }
  go(iter, List.empty[java.net.URI])
}

listFiles(iter).filter(_.toString.endsWith(".csv"))
4
ответ дан zero323 23 August 2018 в 19:49
поделиться
Другие вопросы по тегам:

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