当前位置: 首页 > 知识库问答 >
问题:

从AWS胶合作业中引用配置单元视图

闻人宜
2023-03-14

我试图弄清楚如何将一个用例从EMR迁移到涉及蜂巢视图的AWS胶水。

在今天的EMR中,我有S3中Parquet支持的配置单元外部表,还有其他视图,如create view hive_view作为select col from external_table where col=x

然后在EMR上的Spark中,我可以发出类似df=Spark.sql(“select*from hive_view”)这样的语句来引用我的配置单元视图。

我知道我可以使用Glue目录作为Hive转移的替代,但我正在尝试将Spark工作本身从EMR迁移到Glue。所以在我的end状态下,不再有Hiveendpoint,只有Glue。

问题:

如何在胶水作业中引用这些视图?

到目前为止我所尝试的:使用boto3调用glue.create_table如下所示

glue = boto3.client('glue')
glue.create_table(DatabaseName='glue_db_name', 
   TableInput = {'Name': 'hive_view', 
       'TableType': 'VIRTUAL_VIEW',
       'ViewExpandedText': 'select .... from ...'
    })

我可以看到在Glue目录中创建的对象,但分类显示为“Unknown”,作业中的引用失败,并出现相应的错误:

py4j.protocol.Py4JJavaError: An error occurred while calling o56.getCatalogSource. : 
java.lang.Error: No classification or connection in bill_glue_poc.view_test at ...

共有1个答案

刘野
2023-03-14

您可以在Spark中创建一个临时视图,并像查询配置单元表(Scala)一样查询它:

val dataDyf = glueContext.getSourceWithFormat(
      connectionType = "s3",
      format = "parquet",
      options = JsonOptions(Map(
        "paths" -> Array("s3://bucket/external/folder")
      ))).getDynamicFrame()

// Convert DynamicFrame to Spark's DataFrame and apply filtering
val dataViewDf = dataDyf.toDF().where(...)

dataViewDf.createOrReplaceTempView("hive_view")

val df = spark.sql("select * from hive_view")
 类似资料:
  • 如何从胶水作业中检索胶水工作流参数? 我有一个“Python Shell”类型的AWS胶水作业,它从胶水工作流中定期触发。 该作业的代码将在大量不同的工作流中重用,因此我希望检索工作流参数,以消除对冗余作业的需求。 AWS开发人员指南提供了以下教程:https://docs.AWS.amazon.com/glue/latest/dg/workflow-run-properties-code.htm

  • 我正在使用AWS Glue爬行器来爬行大约170 GB的avro数据,以创建一个数据目录表。 avro数据中有几个不同的模式版本,但爬虫程序仍然能够将数据合并到一个表中(我启用了“按数据兼容性和模式相似性分组-模式”)。 这就是事情出现问题的时候。 我只能使用雅典娜从 一个简短的Google检查让我相信这与avro文件中的模式有关。 通常,这是我集中精力的地方,但是:我已经能够做完全相同的程序(A

  • 当我尝试使用Hive执行非聚合命令时,查询似乎可以正常工作,如下所示: 从Airlines_Analysis.Airline中选择*;从Airlines_Analysis.Airline中选择Airlines.Month; org.apache.hive.service.cli.hivesqlexception:处理语句时出错:失败:执行错误,从org.apache.hive.service.cl

  • 我正在遵循doc:http://docs.aws.amazon.com/elasticmapreduce/latest/releaseguide/emr-dev-create-matchore-outside.html并尝试使用AWSCLI==1.10.38创建emr集群。 我使用文档中提到的以下命令: 但是它说“AWS:error:valid json argument for option--

  • 我正在重构一个传统的基于Spring Batch XML的应用程序,以使用注释配置。我想了解如何将以下XML文件转换为基于注释的配置,并保持相同的关注分离。 为了便于讨论,这里有一个简单的例子。 job-config-1.xml job-config-2.xml job-config-3。xml 我想从XML配置转移到Java配置。我想为每个XML创建3个作业配置类。比如说JobConfig1。j

  • 我每天都有csv文件被传递到S3,这些文件在当月是增量的。所以file1包含第1天的数据,file2包含第1天和第2天的数据,等等。每天我都想对该数据运行一个ETL并将其写入不同的S3位置,这样我就可以使用Athena查询它,而不会出现重复的行。本质上,我只想查询聚合数据的最新状态(这只是最近交付给S3的文件的内容)。 我认为书签不会起作用,因为增量交付包含以前文件中的数据,因此会产生重复。我知道