【问题标题】:Spark - How to get the latest hour in S3 path?Spark - 如何获取 S3 路径中的最新时间?
【发布时间】:2019-03-08 17:58:57
【问题描述】:

我正在使用带有 Spark 和 Scala 的 Databricks 笔记本将数据从 S3 读取到 DataFrame 中:

myDf = spark.read.parquet(s"s3a://data/metrics/*/*/*/)。其中* 通配符代表年/月/日。

或者我只是硬编码:myDf = spark.read.parquet(s"s3a://data/metrics/2018/05/20/)

现在我想在一天之后添加一个小时参数。这个想法是从S3 获取最近可用时间的数据。

如果我选择myDf = spark.read.parquet(s"s3a://data/metrics/2018/05/20/*),那么我将获得 5 月 20 日所有时间的数据。

如何在不硬编码小时的情况下在 Databricks 笔记本中实现这一点?

【问题讨论】:

    标签: scala apache-spark amazon-s3 databricks


    【解决方案1】:

    使用时间日期功能

    from datetime import datetime, timedelta
    
    latest_hour = datetime.now() - timedelta(hours = 1)
    

    您还可以按年、月、日、小时拆分它们

    latest_hour.year
    latest_hour.month
    latest_hour.day
    latest_hour.hour
    

    【讨论】:

    • 我是否正确,然后我应该传递计算出的 latest_hour 而不是像 s"s3a://data/metrics/2018/05/20/latest_hour 这样的通配符?
    • 据我了解,timedelta 来自 Python 日期时间库。但我正在使用 Scala。你知道 Scala 有什么类似的方法吗?
    • 哦,是的,这是 Scala 实现的代码 val now = Calendar.getInstance() val currentHour = now.get(Calendar.HOUR_OF_DAY)
    • 获取当天最近的时间。但是,在通往 S3 的路径中,可能会有不同的日期,如 2018/05/20/,如上所示。如何从路径中获取当天的最新小时 (23)?
    • 我明白你的意思。我想我误解了你的问题。您应该做的是获取 s3 路径中的最新时间。解析这条路径以获得小时。然后将 +1 添加到该小时。
    猜你喜欢
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 2019-09-24
    • 2019-04-09
    • 2017-06-04
    相关资源
    最近更新 更多