【问题标题】:Read files from a folder with names don't contains a string, using PySpark使用 PySpark 从名称不包含字符串的文件夹中读取文件
【发布时间】:2019-10-07 15:38:18
【问题描述】:

我有一个文件夹,里面的文件类似于 -

./env_california_0100.xml
./env_california_0200.xml
./env_california_0300.xml
./env_california_0400.xml
./env_0100.xml
./env_0200.xml
./env_0300.xml
./env_0400.xml

使用 pyspark,如果我想读取名称包含字符串 'california' 的文件,那么我会使用

df=spark.read.format("com.databricks.spark.xml").option("rowTag","someTag").load("/some_folder/*california*.xml")

但是如何读取没有字符串 'california' 的文件呢?

【问题讨论】:

  • 试试!(*california*)*.xml(未经测试)
  • /some_folder/*california*.xml 是一个 glob 模式。为什么是regex 标签?
  • @pault ` !(california)*.xml ` 不起作用
  • @Wiktor Stribiżew 我们如何在 PySpark 中使用 glob?

标签: python regex pyspark glob


【解决方案1】:

使用 glob 提取文件列表,然后在加载调用中解压缩该列表:

   .load(*glob.glob( "/some_folder/*[!california]*.xml"))

因为我们可以像这样加载多个文件:.load(path1,path2,....)

【讨论】:

  • 这将适用于 glob 为什么不使用 glob 来提取文件列表?然后在for循环中一一加载?
  • 你的意思是,读入 RDD?当我将 glob 与 SparkSession 一起使用时,它说 - 输入应该是一条路径。你能给我你建议的样本吗?
  • 事实证明 load 接受不止一个参数,所以只需解压 glob 返回的列表检查我的编辑,
  • df= spark.read.format("com.databricks.spark.xml").option("rowTag","someTag")\ .load(*glob.glob("/some_folder/*[!California]*.xml")) Py4JJavaError: An error occurred while calling o341.load. : java.lang.ClassNotFoundException: Failed to find data source: /some_folder/env_0100.xml. Please find packages at http://spark.apache.org/third-party-projects.html
  • 这回答了你的问题,如你所见,它正在尝试加载文件env_001.xml,你应该问另一个问题,为什么它不能正确加载这个文件,你同意吗?
猜你喜欢
  • 1970-01-01
  • 2017-08-16
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 2016-05-01
  • 2015-10-27
  • 1970-01-01
  • 2013-04-26
相关资源
最近更新 更多