pyspark用正则表达式读取csv文件
Posted
技术标签:
【中文标题】pyspark用正则表达式读取csv文件【英文标题】:pyspark read csv file with regular expression 【发布时间】: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"
【参考方案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)以上是关于pyspark用正则表达式读取csv文件的主要内容,如果未能解决你的问题,请参考以下文章