由于我们的方案是常量,所以我们使用spark.read(),这比在s3中存储数据时从选项创建动态帧快得多
所以现在想用dynamic frame从glue catalog读取数据需要很多时间,所以想用spark read api dataframe.read.format(“”).option(“url”,“”).option(“dtable”,schema.table name).load()读取数据
输入什么格式和网址选项和任何其他东西是必需的??
由于我们的方案是常量,所以我们使用spark.read(),这比在s3中存储数据时从选项创建动态帧快得多
所以现在想用dynamic frame从glue catalog读取数据需要很多时间,所以想用spark read api dataframe.read.format(“”).option(“url”,“”).option(“dtable”,schema.table name).load()读取数据
输入什么格式和网址选项和任何其他东西是必需的??
1条答案
按热度按时间ifmq2ha21#
简短回答:
如果您直接使用sparksession/sparkcontext读取/加载数据,您将得到一个纯sparkDataframe,而不是dynamicframe。
从spark读取时的不同选项:
格式:是您正在读取的源格式,因此可以是parquet、csv、json,。。
加载:它是指向您正在读取的源文件的路径:它可以是本地路径、s3路径、hadoop路径,。。。
选项:很多不同的选项,比如inferschema,如果你想让spark对你最好,并根据csv文件中的数据样本或header=true猜测模式。
举个例子:
在前面的示例中没有创建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),将是:这不会创建任何dynamicframe,除非您想将其转换为dynamicframe,否则您将得到一个纯sparkDataframe。
另一种方法是使用
format()
方法。请记住,csv f.e有几个选项,如“header”或“inferschema”。您需要知道是否要使用它们。最好的做法是在生产环境中定义模式,而不是使用inferschema,但是有几个用例。
此外,如果需要,您可以使用以下方法将纯Dataframe转换为动态帧: