【问题标题】:Load CSV file in S3 with AWS Glue in Scala在 Scala 中使用 AWS Glue 在 S3 中加载 CSV 文件
【发布时间】:2019-11-27 16:59:32
【问题描述】:

这应该很容易... 对于我的 AWS Glue 作业,我想从 S3 上的 CSV 文件加载我的配置设置。这样,我的 lambda 函数可以触发作业并将文件名作为参数发送。在 Python 中,我可以轻松做到这一点:

s3 = boto3.resource('s3')
bucket = s3.Bucket(<my bucket name>)
obj = s3.Object(<my bucket name>,<file location>)
data = obj.get()['Body'].read().decode('utf-8')

在 Scala 中,我找不到任何与 boto3 库等效的东西。我试过这样的 getSourceWithFormat 函数:

var datasource = glueContext.getSourceWithFormat("s3", JsonOptions(Map("paths" -> Set(<file folder name>)),
     Map("exclusions" -> <file patterns to exclude>)), 
     format = "csv", formatOptions = JsonOptions(Map("separator" -> "\t"),Map("header" -> true)))
     .getDynamicFrame()

但我想只加载一个文件并像处理字符串数组一样操作它。

谢谢!

【问题讨论】:

  • 类似这样的:index.scala-lang.org/bizreach/aws-s3-scala/aws-s3-scala/… ?您可以查找 Java/Scala S3 库——它们可以让您访问存储桶中的文件。您可以根据格式读取文件:文本、csv、二进制、json 等。
  • 您可以使用Benji S3(我是其中的贡献者)将 S3 对象读取为 Akka Stream Source,知道 Akka 提供了 CSV 框架。
  • 你可以用 python 编写你的 lambda,如果你没有找到等效的 scala 代码,可以通过 lambda 触发器调用 Scala 中的 Glue 作业。
  • 谢谢@bdcloud。这就是我最终所做的。
  • @DouglasDaly 如果有帮助,请将其标记为已回答。

标签: scala amazon-s3 aws-glue


【解决方案1】:

应该是这样的:

  1. 在 Lambda 中编写 python 代码来读取文件。
  2. 使用 Scala 代码创建 Glue 作业。
  3. 确保您已启用触发器,该触发器将使用文件名调用 Glue 作业。

【讨论】:

    【解决方案2】:

    把你的数据源转换成数据框,然后调用collect方法怎么样?

    val  myArray = datasource.toDF().collect
    

    【讨论】:

      猜你喜欢
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      相关资源
      最近更新 更多