spark读取hdfs文件的路径使用正则表达式

spark读取hdfs文件的路径使用正则表达式

例子一、

# -*- coding:utf-8 -*-
from pyspark import SparkConf
from pyspark import SparkContext
import os
if __name__ == '__main__':
    os.environ["SPARK_HOME"] = "/Users/a6/Applications/spark-2.1.0-bin-hadoop2.6"
    conf = SparkConf().setMaster('local').setAppName('group')
    sc = SparkContext(conf=conf)

    '''/log/shuangshi_haibian/2018-07-16-19-58-log.1531792035400.tmp'''
    "hdfs://localhost:9002/tmp/match/2018-07-16-19-58-log.1531788952521"
    '''
    需要:实时处理数据时,如果读取到tmp文件,但是实际处理的时候变成不是tmp文件,这样会导致程序报错,
    在这里,我们就是要只匹配那些以数字为结尾的hdfs文件作为spark的输入,不把以tmp的临时文件作为输入
    # hdfs目录
    -rw-r--r--   1 a6 supergroup      31672 2018-07-17 10:59 /tmp/match/2018-07-16-19-58-log.1531792131825
    -rw-r--r--   1 a6 supergroup      30182 2018-07-17 10:59 /tmp/match/2018-07-16-19-58-log.1531792160280
    -rw-r--r--   1 a6 supergroup      27956 2018-07-17 10:59 /tmp/match/2018-07-16-19-58-log.1531792347369.tmp
    '''

    '''
    input_data="hdfs://localhost:9002/tmp/match/%s-19-58-log.1531788952521" % ('2018-07-16')
    print input_data

    input_data = "hdfs://localhost:9002/tmp/match/%s-19-58-log.153178895252[1-9]" % ('2018-07-16')
    print input_data
    '''
    '''
    经过查询,在匹配路径时,使用[0-9]做匹配,能够获取所有最后一位以数字为结尾的那些hdfs文件作为输入,而不是tmp文件,满足需求'''
    input_data = "hdfs://localhost:9002/tmp/match_bak/%s*[0-9]" % ('2018-07-16')

    print input_data
    result = sc.textFile(input_data)
    res_rdd= result.collect()
    for line in res_rdd:
        print line

例子二、

spark.read.json("/flume/product/160/raw1/2017/05/23/*[1-9]")

读取文件,文件以数字结尾.

你可能感兴趣的:(Hadoop,Spark,Python)