【问题标题】:Spark Scala script to read data from S3 on daily basisSpark Scala 脚本每天从 S3 读取数据
【发布时间】:2018-09-04 06:29:24
【问题描述】:

有一个 java 应用程序每天将数据(在 csv 文件中)转储到 s3。此应用程序根据系统日期(MM-DD-YYYY 格式)在 S3 中创建文件夹,然后将文件添加到创建的文件夹中。

现在我想每天从 S3 读取这些文件,例如

val fileFromS3= sc.textFile("s3a://digital/MM-DD-YYYY/abc.csv")

现在脚本应该将 'MM-DD-YYYY' 替换为 系统日期。

请提出可能的解决方案或任何其他方式来实现这一点。

【问题讨论】:

    标签: scala amazon-web-services apache-spark amazon-s3 rdd


    【解决方案1】:

    您可以通过 Calendar 类获取 currentTime。

    首先你需要一些导入:

    import java.util.Calendar
    import java.text.SimpleDateFormat
    import java.util.Date
    

    然后就可以得到当前时间了:

    val now = Calendar.getInstance().getTime()
    

    并准备格式化程序以您想要的正确格式检索日期并确保两位数的月份和日期

    val formatter = new SimpleDateFormat("MM-dd-yyyy")
    

    然后您可以使用格式化程序将日期作为字符串获取

    val dateAsString = formatter.format(now)
    

    然后您可以使用dateAsString 值加载您的资源String interpolation

    编辑以删除错字:

    val fileFromS3= sc.textFile(s"s3a://digital/${dateAsString}/abc.csv")
    

    【讨论】:

    • 感谢@SCouto 的快速解决。一切正常,除了 dateAsString 变量 id 在读取文件时没有得到解决。获取 'org.apache.hadoop.mapred.InvalidInputException:' ,我们是否在这里遗漏了什么。
    • 哦,对不起,我有一个错字。我会在答案中修复它
    • 就是这样,你需要一个's'在String之前使用String插值并解析变量
    • 哇,现在工作正常。非常感谢您分享有关“字符串插值”的文档链接。
    猜你喜欢
    • 2015-08-04
    • 2015-12-04
    • 1970-01-01
    • 2018-11-09
    • 2018-10-18
    • 1970-01-01
    • 2021-04-27
    • 2017-10-03
    • 2021-06-14
    相关资源
    最近更新 更多