微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 spark 而不是使用动态框架胶水上下文从胶水目录中读取 简答:长答案:

如何解决使用 spark 而不是使用动态框架胶水上下文从胶水目录中读取 简答:长答案:

由于我们的方案是不变的,我们使用 spark.read() 比在数据存储在 s3 中时从选项创建动态帧要快得多

所以现在想从胶水目录中读取数据 使用动态框架需要很多时间 所以想使用spark read api阅读 Dataframe.read.format("").option("url","").option("dtable",schema.table name).load()

在格式和网址选项中输入什么以及需要其他任何东西??

解决方法

简答:

如果您使用 SparkSession/SparkContext 直接读取/加载数据,您将获得一个 纯 Spark DataFrame 而不是 DynamicFrame。

从 spark 读取时的不同选项:

  • 格式:是您正在读取的源格式,因此可以是 parquet、csv、json 等。
  • load:它是您正在读取的源文件/文件的路径:它可以是本地路径、s3 路径、hadoop 路径、...
  • 选项:有很多不同的选项,比如 inferSchema,如果你想为你提供最好的火花,并根据 csv 文件中的数据样本或 header = true 猜测模式。

示例:

df = spark.read.format("csv").option("header",true) .option("inferSchema",true).load("s3://path")

在前面的示例中没有创建 DynamicFrame,因此 df 将是一个 DataFrame,除非您使用胶水 API 将其转换为 DynamicFrame。


长答案:

Glue 目录本身只是一个 aws Hive 实现。如果需要,您可以创建一个定义架构、读取器类型和映射的胶水目录,然后它可用于不同的 aws 服务,如胶水、雅典娜或 redshift-spectrum。我从使用胶水目录中看到的唯一好处实际上是与不同的 aws 服务的集成。

我认为您可以使用爬虫程序以及与 athena 和 redshift-specturm 的集成从数据目录中获得最大收益,并使用统一的 API 将它们加载到粘合作业中。

您始终可以使用 from_options 胶水方法直接从使用胶水的不同来源和格式进行读取,并且您不会丢失胶水拥有的一些出色工具,它仍然会将其作为 DynamicFrame 读取。

如果您出于任何原因不想从胶水中获取该数据,您只需指定一个 DataFrame Schema 并使用 SparkSession 直接读取,但请记住,您将无法访问书签,并且其他工具,尽管您可以将该 DataFrame 转换为 DynamicFrame。

使用 spark 直接从 s3 读取到 DataFrame(例如镶木地板、json 或 csv 格式)的示例是:

df = spark.read.parquet("s3://path/file.parquet")
df = spark.read.csv("s3a://path/*.csv")
df= spark.read.json("s3a://path/*.json")

除非您想将其转换为它,否则不会创建任何 DynamicFrame,您将获得一个纯 Spark DataFrame。

另一种方法是使用 format() 方法。

df = spark.read.format("csv").option("header",true).load("s3://path")

请记住,对于 csv f.e.,有几个选项,例如“header”或“inferSchema”。您需要知道是否要使用它们。最好的做法是在生产环境中定义架构而不是使用 inferSchema,但有几个用例。

此外,如果需要,您始终可以使用以下方法将该纯 DataFrame 转换为 DynamicFrame:

DynamicFrame.fromDF(df,glue_context,..)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。