amazon-web-services - 在 Glue 作业中创建 Glue 数据目录表

标签 amazon-web-services apache-spark aws-glue

我有一个我认为非常简单的要求。

我想创建一个作业,将一个文件转换为另一个文件,然后更新 Glue 中的数据目录元数据。这将允许另一个作业获取新数据源并使用 Glue/EMR/Athena 使用它。

现在,我可以毫无问题地进行转换,但在我的一生中,除了使用爬虫、控制台或胶水 API 之外,我无法弄清楚如何在 Glue 中创建表 - 我更愿意在工作中这样做我可以只调用下一个作业,而不是执行爬虫并等待它完成。

胶水 API 的问题是我还必须转换 Spark 模式以了解 API 布局。

在 EMR 上的 Spark 中,我可以很容易地创建胶水数据目录表(尽管没有很好的记录!):

dataframe.write.mode(mode).format("parquet").option("path", parquet_path).saveAsTable(glue_table)
dataframe.write.format("parquet").mode(mode).save(parquet_path)

这在 Glue 中不起作用。虽然我可以在 Glue 作业中的 Spark session 上设置 Glue 数据目录配置单元元数据存储:
spark = SparkSession.builder \
    .appName(args['JOB_NAME']) \
    .config("hive.metastore.client.factory.class", "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory") \
    .enableHiveSupport() \
    .getOrCreate()

但是当我尝试设置数据库时,它说它不存在,当我列出数据库时,我得到以下信息:
Databases=[Database(name=u'default', description=u'Default Hive database', locationUri=u'hdfs://ip-172-31-29-88.ap-southeast-2.compute.internal:8020/user/spark/warehouse')]

这让我认为胶水不适用于胶水数据目录 - 它似乎使用默认配置单元目录,我错过了什么吗?

这是一个问题的原因是,在 EMR 中,我可以执行以下操作:
spark.sql("select * from my_glue_table")

哪个可行,但我怀疑这在 Glue 作业中不起作用,除非我运行爬虫,而且我真的不认为在 EMR 中需要运行爬虫,我几乎可以用一行代码来完成。

我在这里错过了什么吗?

提前致谢。

最佳答案

您可以从 DataFrame 创建临时表并运行 sql 查询:

var dataDf = glueContext.sparkSession.read.format(format).load(path)
// or var dataDf = dynamicFrame.toDF()
dataDf.createOrReplaceTempView("my_glue_table")
val allDataDf = glueContext.sparkSession.sql("select * from my_glue_table")

要在数据目录中创建表,以下代码会有所帮助:
val table = new com.amazonaws.services.glue.catalog.Table(namespace, tblName, schema,
  partitions, parameters, location, serdeInfo, hiveCompatible)
glueContext.getCatalogClient.createTable(table)

关于amazon-web-services - 在 Glue 作业中创建 Glue 数据目录表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51980942/

相关文章:

scala - AWS Glue Spark 作业 - 使用 CatalogSource 时如何对 S3 输入文件进行分组?

amazon-web-services - 位于独立 Kubernetes 集群中的两个 Pod 之间的连接

Python 脚本不会从 Aws Ubuntu 终端运行

apache-spark - Apache Spark GCS 连接器的速率限制

amazon-web-services - 有人可以提供 AWS Cloudformation AWS::GLUE::WORKFLOW 模板的示例吗?

amazon-web-services - 我应该每次都运行 Glue 爬虫来获取最新数据吗?

amazon-web-services - 如何创建 aws ec2 公私 key 对

python - Boto3 S3 实例的 AWS 凭证放置在哪里

json - Spark Streaming Scala 将不同结构的json组合成一个DataFrame

apache-spark - 如何使用 Zookeeper 为 HA 设置 Spark?