使用火花而不是使用动态框架(胶水上下文)从胶水目录中读取

Posted

技术标签:

【中文标题】使用火花而不是使用动态框架(胶水上下文)从胶水目录中读取【英文标题】:Read from glue cataloge using spark and not using dynamic frame(glue context) 【发布时间】:2021-07-07 10:56:13 【问题描述】:

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

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

在格式和url选项中输入什么以及需要什么其他的东西??

【问题讨论】:

【参考方案1】:

简答:

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

从 spark 读取时的不同选项:

格式:是您正在读取的源格式,因此可以是 parquet、csv、json、.. load:它是您正在读取的源文件的路径:它可以是本地路径、s3 路径、hadoop 路径... 选项:有很多不同的选项,例如 inferSchema,如果您希望 spark 最适合您,并根据采集的数据样本或 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-services 的集成。

我认为您可以使用爬虫以及与 athena 和 redshift-specturm 的集成充分利用数据目录,并使用统一的 API 将它们加载到粘合作业中。

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

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

使用 spark 从 s3 直接读取到 DataFrame(f.e 以 parquet、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) .option("inferSchema", true).load("s3://path")

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

此外,如果需要,您可以随时将纯 DataFrame 转换为 DynamicFrame:

DynamicFrame.fromDF(df, glue_context, ..)

【讨论】:

之前我们在 s3 中有数据,所以我们使用 spark.read.format(csv).option(header, true)。加载(args [d1source])。现在数据存储在胶水目录中,所以想知道如何在不使用动态框架的情况下读取它

以上是关于使用火花而不是使用动态框架(胶水上下文)从胶水目录中读取的主要内容,如果未能解决你的问题,请参考以下文章

AWS Glue Python shell 配置 DPU

通过火花数据框读取 S3 文件时,胶水书签不起作用

无法从镶木地板中读取零件文件

创建数据库火花sql

将胶水pyspark错误写入文本文件

aws 胶水 HiveContext 访问胶水 DataCatalog