【问题标题】:pyspark read csv file with regular expressionpyspark用正则表达式读取csv文件
【发布时间】:2018-06-15 09:21:00
【问题描述】:

我正在尝试从具有特定模式的目录中读取 csv 文件 我想匹配所有包含此字符串"logs_455DD_33 的文件 t 应该匹配任何类似 "

machine_logs_455DD_33.csv

logs_455DD_33_2018.csv

机器_logs_455DD_33_2018.csv

我尝试了以下正则表达式,但它与上述格式的文件不匹配。

file = "hdfs://data/logs/{*}logs_455DD_33{*}.csv"
df = spark.read.csv(file)

【问题讨论】:

  • 试试这个file = "hdfs://data/logs/*logs_455DD_33*.csv"

标签: python regex apache-spark pyspark apache-spark-sql


【解决方案1】:

我必须在我的 pyspark 程序中做类似的事情,我需要通过 cycle_date 在 HDFS 中选择一个文件,我这样做了:

df=spark.read.parquet(pathtoFile + "*" + cycle_date + "*")

【讨论】:

    【解决方案2】:

    您可以使用子进程列出 hdfs 中的文件并 grep 这些文件:

    import subprocess
    
    # Define path and pattern to match
    dir_in = "data/logs"
    your_pattern = "logs_455DD_33"
    
    # Specify your subprocess
    args = "hdfs dfs -ls "+dir_in+" | awk '{print $8}' | grep "+your_pattern
    proc = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
    
    # Get output and split it
    s_output, s_err = proc.communicate()
    l_file = s_output.split('\n')
    
    # Read files
    for file in l_file :
        df = spark.read.csv(file)
    

    【讨论】:

    • 这不是特别不使用spark,也就是说跨分布式文件系统的集群会比较慢? (HDFS/EMRFS)
    猜你喜欢
    • 2017-05-17
    • 1970-01-01
    • 2021-10-08
    • 2022-10-14
    • 2021-05-01
    • 2020-09-06
    • 2019-01-24
    • 1970-01-01
    • 2013-04-08
    相关资源
    最近更新 更多