На самом деле 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 всегда будет в любом браузере.
sc.wholeTextFiles (путь) должен помочь. Он дает rdd (filepath, filecontent).
Это то, что в конечном итоге сработало для меня:
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
Я не тестировал его полностью, но похоже что-то вроде этого:
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"))