使用spark而不是使用动态框架(glue上下文)从glue目录读取

lokaqttq  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(500)

由于我们的方案是常量,所以我们使用spark.read(),这比在s3中存储数据时从选项创建动态帧快得多
所以现在想用dynamic frame从glue catalog读取数据需要很多时间,所以想用spark read api dataframe.read.format(“”).option(“url”,“”).option(“dtable”,schema.table name).load()读取数据
输入什么格式和网址选项和任何其他东西是必需的??

ifmq2ha2

ifmq2ha21#

简短回答:

如果您直接使用sparksession/sparkcontext读取/加载数据,您将得到一个纯sparkDataframe,而不是dynamicframe。
从spark读取时的不同选项:
格式:是您正在读取的源格式,因此可以是parquet、csv、json,。。
加载:它是指向您正在读取的源文件的路径:它可以是本地路径、s3路径、hadoop路径,。。。
选项:很多不同的选项,比如inferschema,如果你想让spark对你最好,并根据csv文件中的数据样本或header=true猜测模式。
举个例子:

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

在前面的示例中没有创建dynamicframe,因此df将是一个Dataframe,除非您使用glue api将其转换为dynamicframe。

长话短说:

glue catalog本身只是一个aws配置单元实现。如果需要,您可以创建一个定义模式、读取器类型和Map的glue目录,然后它就可以用于不同的aws服务,如glue、athena或redshift spectrum。我从使用glue目录中看到的唯一好处实际上是与不同aws服务的集成。
我认为您可以从使用爬虫的数据目录以及与athena和redshift specturm的集成中获得最大的收益,还可以使用统一的api将它们加载到粘合作业中。
你可以使用glue直接从不同的来源和格式中使用from\u options glue方法来阅读,而且你不会失去glue所拥有的一些优秀工具,它仍然可以作为动态框架来阅读。
如果出于任何原因不想从glue中获取数据,只需指定一个dataframe模式并使用 SparkSession 但请记住,尽管您可以将Dataframe转换为动态帧,但您将无法访问书签和其他工具。
使用spark直接读取s3的示例 DataFrame (Parquet、json或csv格式的f.e),将是:

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

这不会创建任何dynamicframe,除非您想将其转换为dynamicframe,否则您将得到一个纯sparkDataframe。
另一种方法是使用 format() 方法。

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

请记住,csv f.e有几个选项,如“header”或“inferschema”。您需要知道是否要使用它们。最好的做法是在生产环境中定义模式,而不是使用inferschema,但是有几个用例。
此外,如果需要,您可以使用以下方法将纯Dataframe转换为动态帧:

DynamicFrame.fromDF(df, glue_context, ..)

相关问题