【问题标题】:How to read file path values as columns in Spark?如何在 Spark 中将文件路径值读取为列?
【发布时间】:2021-12-21 10:10:01
【问题描述】:

我在 Azure Synapse Notebooks 中工作,并从格式良好的文件夹路径将读取文件读入 Dataframe,如下所示:

鉴于该通配符引用了许多文件夹,我如何将“状态”值捕获为生成的 Dataframe 中的一列?

【问题讨论】:

  • 是的,但它包含整个文件路径,而不是 HDFS 命名的小节。
  • 试试:df = spark.read.load("abfss://....dfs.core.windows.net/"),spark可以直接读取文件夹,df应该包含state列。
  • OH @Steven - 我看到你在那里做了什么 - 如果我没有在路径中指定通配符,那么我将路径值作为列。这对我有用 - 如果您将其添加为答案,我会接受它。

标签: pyspark apache-spark-sql azure-synapse


【解决方案1】:

无需使用通配符*
试试看:df = spark.read.load("abfss://....dfs.core.windows.net/")

Spark 可以直接读取分区文件夹,然后df 应该包含具有不同值的state 列。

【讨论】:

  • 将此标记为答案,并指出不同之处在于删除了“/State=*/.snappy.parquet”——这显然允许 Spark 自动将路径值添加为列。
【解决方案2】:

使用input_file_name函数获取完整的输入路径,然后应用regexp_extract提取你想要的部分。

例子:

df.withColumn("filepath", F.input_file_name())
df.withColum("filepath", F.regexp_extract("filepath", "State=(.+)\.snappy\.parquet", 1)

【讨论】:

  • 谢谢,我真的在想(希望?)这在不手动解析文件路径的情况下是可能的。
猜你喜欢
  • 1970-01-01
  • 2021-06-12
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 2015-12-18
  • 2023-03-21
  • 1970-01-01
相关资源
最近更新 更多