如何从HDFS上的目录中读取所有文件并使用烫印处理它。对于本地文件系统,我使用下面的
import com.twitter.scalding._
import com.twitter.scalding.JsonLine
import java.io._
class ParseJsonJob(args: Args) extends Job(args) {
val fileList = new File(args("input")).listFiles
val fields = ('device_guid
,'service_name
,'event_type
)
fileList.map {
fileName =>
JsonLine(fileName.toString, fields)
.read
.filter ('service_name) { name: String => name == "myservice" }
.write(Tsv(args("output") + fileName.toString.split("/").last))
}
}
这不适用于HDFS。 TextLine或JsonLine是否读取文件以外的目录?
答案 0 :(得分:0)
您将获得Hadoop文件系统并使用FileSystem.liststatus原语来扫描HDFS目录,例如:
...
val hadoopConf= implicitly[Mode] match {
case Hdfs(_, conf) => conf
}
val fs= FileSystem.get(hadoopConf)
for(status <- fs.listStatus(new Path(args("input")))) {
JsonLine(status.getPath.toString.toString, fields)
.read
.filter ('service_name) { name: String => name == "myservice" }
.write(Tsv(args("output") + fileName.toString.split("/").last))
}
答案 1 :(得分:0)
import com.twitter.scalding._
import com.twitter.scalding.JsonLine import java.io ._class ParseJsonJob(args:Args)扩展Job(args){ val fields =('device_guid,'service_name,'event_type)
JsonLine(args("input"), fields) .read .filter ('service_name) { name: String => name == "myservice" } .write(Tsv(args("output") ) } }
这对你有用。 Lemme知道是不是。