Athena/Glue - 将简单的JSON解析(但将其视为CSV)
创始人
2024-09-21 13:00:37
0

要将简单的JSON解析为CSV格式,您可以使用AWS的Athena和Glue服务。以下是解决方案的步骤和代码示例:

  1. 创建表和数据库:在Athena中创建一个数据库和表,用于存储解析后的JSON数据。
CREATE DATABASE IF NOT EXISTS mydatabase;
USE mydatabase;

CREATE EXTERNAL TABLE IF NOT EXISTS mytable (
  col1 string,
  col2 int,
  col3 string
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = '1'
) LOCATION 's3://mybucket/myfolder/'
TBLPROPERTIES ('has_encrypted_data'='false');
  1. 创建ETL脚本:使用Glue创建一个ETL脚本,将JSON数据转换成CSV格式,并将其加载到Athena中。
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

datasource0 = glueContext.create_dynamic_frame.from_catalog(database = "mydatabase", table_name = "mytable")
applymapping1 = ApplyMapping.apply(frame = datasource0, mappings = [("col1", "string", "col1", "string"), ("col2", "int", "col2", "int"), ("col3", "string", "col3", "string")], transformation_ctx = "applymapping1")
resolvechoice2 = ResolveChoice.apply(frame = applymapping1, choice = "make_cols", transformation_ctx = "resolvechoice2")
dropnullfields3 = DropNullFields.apply(frame = resolvechoice2, transformation_ctx = "dropnullfields3")
datasink4 = glueContext.write_dynamic_frame.from_catalog(frame = dropnullfields3, database = "mydatabase", table_name = "mytable_csv", transformation_ctx = "datasink4")

job.commit()
  1. 运行ETL脚本:将ETL脚本上传到AWS Glue,并运行它以将JSON数据转换为CSV格式并加载到Athena中。

  2. 查询数据:在Athena中查询转换后的CSV数据。

SELECT * FROM mydatabase.mytable_csv;

以上是使用Athena和Glue将简单的JSON解析为CSV格式的解决方案和代码示例。您可以根据您的具体需求和JSON结构进行适当的调整。

相关内容

热门资讯

安装apache-beam==... 出现此错误可能是因为用户的Python版本太低,而apache-beam==2.34.0需要更高的P...
避免在粘贴双引号时向VS 20... 在粘贴双引号时向VS 2022添加反斜杠的问题通常是由于编辑器的自动转义功能引起的。为了避免这个问题...
Android Recycle... 要在Android RecyclerView中实现滑动卡片效果,可以按照以下步骤进行操作:首先,在项...
omi系统和安卓系统哪个好,揭... OMI系统和安卓系统哪个好?这个问题就像是在问“苹果和橘子哪个更甜”,每个人都有自己的答案。今天,我...
原生ios和安卓系统,原生对比... 亲爱的读者们,你是否曾好奇过,为什么你的iPhone和安卓手机在操作体验上有着天壤之别?今天,就让我...
Android - 无法确定任... 这个错误通常发生在Android项目中,表示编译Debug版本的Java代码时出现了依赖关系问题。下...
Android - NDK 预... 在Android NDK的构建过程中,LOCAL_SRC_FILES只能包含一个项目。如果需要在ND...
Akka生成Actor问题 在Akka框架中,可以使用ActorSystem对象生成Actor。但是,当我们在Actor类中尝试...
Agora-RTC-React... 出现这个错误原因是因为在 React 组件中使用,import AgoraRTC from “ago...
Alertmanager在pr... 首先,在Prometheus配置文件中,确保Alertmanager URL已正确配置。例如:ale...