pyspark用正则表达式读取csv文件

时间:2018-06-15 09:21:01

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

我试图从具有特定模式的目录中读取csv文件 我希望匹配包含此字符串"logs_455DD_33的所有文件 t应匹配"

之类的东西
  

machine_的 logs_455DD_33 的.csv

     

logs_455DD_33 _2018.csv

     

machine_的 logs_455DD_33 _2018.csv

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

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

2 个答案:

答案 0 :(得分:1)

您可以使用子进程来监听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)

答案 1 :(得分:1)

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

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