【问题标题】:how to apply pattern matching on the file name using spark(scala)如何使用 spark(scala) 对文件名应用模式匹配
【发布时间】:2017-06-26 23:05:04
【问题描述】:

我正在监视hdfs 中的目录,如果将文件放入其中,我想检索进入目录的文件的名称并应用模式匹配,以便根据名称对它们进行排序到目前为止我已经能够检索文件路径。它给了我文件名,但我不知道如何进一步进行模式匹配

import org.apache.hadoop.mapreduce.lib.input.{FileSplit, TextInputFormat}
import org.apache.spark.rdd.{NewHadoopRDD}
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.hadoop.io.LongWritable
import org.apache.hadoop.io.Text
object path {

def main(args: Array[String]) {

val conf = new SparkConf().setAppName("Simple     Application").setMaster("local")
val sc = new SparkContext(conf)

val fc = classOf[TextInputFormat]
val kc = classOf[LongWritable]
val vc = classOf[Text]

val path :String = "/home/hduser/Desktop/foldername"
val text = sc.newAPIHadoopFile(path, fc ,kc, vc, sc.hadoopConfiguration)
println("++++++++++++++   "+text)
val linesWithFileNames = text.asInstanceOf[NewHadoopRDD[LongWritable, Text]].mapPartitionsWithInputSplit((inputSplit, iterator) => {
val file = inputSplit.asInstanceOf[FileSplit]


println(">>>>>>>>>>>>>>>>   "+file.getPath)



iterator.map(tup => (file.getPath, tup._2))
}
)
linesWithFileNames.collect()
}
}

这给了我这样的路径 /home/hduser/Desktop/folder_name/XYZ_123_pqr_abc_FILENAME

我想根据文件名开始应用模式匹配......这里它将基于 XYZ

任何帮助将不胜感激。

【问题讨论】:

    标签: scala hadoop pattern-matching spark-streaming


    【解决方案1】:

    我认为你不够具体。根据您的问题,我假设 XYZ 是数字,并且您打算按该数字对文件进行排序,如果是这种情况,请考虑以下示例:

    val matchStart = """^(\d{3})""".r.unanchored
    val number = file match {
      case matchStart(number, _*) => number.toInt
      case _ => ???//error handling, not necessarily unimplemented error
    }
    

    现在已经从文件名的开头提取了数字,您可以执行排序等。 编辑

    评论答案中的以下信息将是相似的:

    val matchStart = """^([a-zA-Z1-9]{3})""".r.unanchored
    val prefix = file match {
      case matchStart(a, _*) => a
      case _ => ???//error handling, not necessarily unimplemented error
    }
    

    提取前缀后,您可以使用它做任何您想做的事情。

    【讨论】:

    • 抱歉没有具体说明,但这里 XYZ 是字母......它只是字母的随机组合,必须根据它进行排序......我打算要做的是匹配前三个字母,然后选择架构文件...基于文件名......因此匹配文件名在这里非常重要......帮助将不胜感激
    猜你喜欢
    • 2016-03-06
    • 2019-05-26
    • 1970-01-01
    • 2011-08-08
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多