【问题标题】:Inserting a date variable into Dataframe with a sting file path (read.csv)使用 sting 文件路径 (read.csv) 将日期变量插入 Dataframe
【发布时间】:2020-01-06 21:35:07
【问题描述】:

我正在完成一个过程,我想将 csv 文件提取到数据帧中。此文件是每天运行的增量文件,存储在 Azure DataLake 存储中。

DF = (

  spark
  .read.option("header",True)\.option("inferSchema", "true").option("delimiter", "|")
  .csv("folder2/folder1/Intenstion_file2020*.csv")
)

从上面的代码中,我基本上收集了所有以“file2020”开头的文件,然后是所有其他文件。因此,如果有 10 个,则将其放入一个数据帧中。

我想要做的不是将所有这 10 个文件提取到数据框中,而是选择与系统日期匹配的文件。因此,如果我有以下文件: ​​​ ​1)文件2020/01/01 ​2)文件2020/01/02 ​3) 文件2020/01/09 ​​​ ​我只想摄取第三个文件。然后下一次它将选择具有最新日期的下一个文件。

我尝试通过首先获取系统日期来解决此问题。这在数据框部分之前运行。

 #Getting System Time Stamp
import datetime
date_value = datetime.datetime.now()
print(datetime.datetime.strftime(date_value,'%Y/%m/%d'))

所以如果我在上面的笔记本上运行,我会得到“date_value”= 2020/01/09。然后我想做的是将该值连接到上面数据框示例中的“csv(path)”中。

所以不是有

.csv("folder2/folder1/Intenstion_file2020*.csv")

我会有类似的东西:

.csv(concat_ws("....file" date_value "*.csv"))

所以它会自动找到日期最接近系统日期的文件。

我尝试了上面的一些变量,但我缺少正确的语法,或者我上面所做的是否可行。有没有人尝试过上述操作?

感谢任何帮助。​

2020 年 1 月 9 日更新 我更新了问题,以便更清楚地了解我想要实现的目标。

【问题讨论】:

    标签: databricks azure-databricks


    【解决方案1】:

    我猜你使用 concat_ws 的方式是错误的。

    请参考这个 - https://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html#pyspark.sql.functions.concat_ws

    此外,您不能连接列和字符串。它应该是两列。

    所以使用 f.concat_ws("-", df.colA, f.lit("date_value"))

    【讨论】:

    • 嗨@pkatta,感谢您的帖子。我使用 concat 的原因不是因为我必须这样做,而是我想到了什么。我对其他可行的操作持开放态度。对不起,我对你的解决方案有点困惑。在应用日期过滤器之前,是否必须在 Dataframe 从 csv 文件中读取数据之后使用 concat_ws?我想我的问题是我想在旧文件被读入数据框之前过滤掉它们,我不确定如何将该日期过滤器插入到实际的路径字符串中。
    • 对不起,我有点困惑 1) 我认为您需要更改格式,例如 '%Y%m%d' 而不是 '%Y/%m/%d'。查看您想要的代码日期,格式为“....file20191217*.csv” 2)您不必使用 concat_ws 函数,您现在可以简单地执行此操作 = (datetime.datetime.strftime(now,'% Y%m%d') .csv(file_name+str(now)+"xxx.csv")
    • 嗨 pkatta,感谢您的回复,但我想我还是迷路了。我想做的是创建一个直接从 ADLS 文件夹读取文件的数据框。下面是我最初是如何做到的。 DF = ( spark .read.option("header",True).option("inferSchema", "true").option("delimiter", "|") .csv("folder1/folder2/CSV_file_01082019.csv") )问题是,我想插入我称为“现在”的日期变量,而不是“01082019”(这是一个字符串)。那么会发生什么是Dataframe“DF”会自动选择等于系统日期的文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2017-03-11
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多