如何将 csv/txt 文件加载到 AWS Glue 作业中
How to load a csv/txt file into AWS Glue job
我对 AWS Glue 有以下 2 条说明,请您说明一下。因为我需要在我的项目中使用胶水。
我想将 csv/txt 文件加载到 Glue 作业中进行处理。 (就像我们在 Spark 中使用数据帧所做的那样)。这在 Glue 中可能吗?或者我们是否必须只使用 Crawlers 将数据爬取到 Glue 表中,然后像下面那样使用它们进行进一步处理?
empdf = glueContext.create_dynamic_frame.from_catalog(
database="emp",
table_name="emp_json")
下面我使用 Spark 代码将文件加载到 Glue 中,但我收到了冗长的错误日志。我们可以直接 运行 Spark 或 PySpark 代码而不对 Glue 进行任何更改吗?
import sys
from pyspark.context import SparkContext
from awsglue.context import GlueContext
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)
dfnew = spark.read.option("header","true").option("delimiter", ",").csv("C:\inputs\TEST.txt")
dfnew.show(2)
可以使用 Glue 直接从 s3 加载数据:
sourceDyf = glueContext.create_dynamic_frame_from_options(
connection_type="s3",
format="csv",
connection_options={
"paths": ["s3://bucket/folder"]
},
format_options={
"withHeader": True,
"separator": ","
})
您也可以只使用 spark 来做到这一点(正如您已经尝试过的那样):
sourceDf = spark.read
.option("header","true")
.option("delimiter", ",")
.csv("C:\inputs\TEST.txt")
但是,在这种情况下,Glue 不保证他们提供合适的 Spark 阅读器。因此,如果您的错误与缺少 CSV 数据源有关,那么您应该添加 spark-csv lib to the Glue job by providing s3 path to its locations via --extra-jars 参数。
以下2个案例我测试工作正常:
将文件从 S3 加载到 Glue。
dfnew = glueContext.create_dynamic_frame_from_options("s3", {'paths': ["s3://MyBucket/path/"] }, format="csv" )
dfnew.show(2)
从已通过 Glue Crawlers 生成的 Glue 数据库和表加载数据。
DynFr = glueContext.create_dynamic_frame.from_catalog(database="test_db", table_name="test_table")
DynFr 是一个 DynamicFrame,所以如果我们想在 Glue 中使用 Spark 代码,那么我们需要将它转换成如下所示的普通数据帧。
df1 = DynFr.toDF()
我对 AWS Glue 有以下 2 条说明,请您说明一下。因为我需要在我的项目中使用胶水。
我想将 csv/txt 文件加载到 Glue 作业中进行处理。 (就像我们在 Spark 中使用数据帧所做的那样)。这在 Glue 中可能吗?或者我们是否必须只使用 Crawlers 将数据爬取到 Glue 表中,然后像下面那样使用它们进行进一步处理?
empdf = glueContext.create_dynamic_frame.from_catalog( database="emp", table_name="emp_json")
下面我使用 Spark 代码将文件加载到 Glue 中,但我收到了冗长的错误日志。我们可以直接 运行 Spark 或 PySpark 代码而不对 Glue 进行任何更改吗?
import sys from pyspark.context import SparkContext from awsglue.context import GlueContext sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session job = Job(glueContext) job.init(args['JOB_NAME'], args) dfnew = spark.read.option("header","true").option("delimiter", ",").csv("C:\inputs\TEST.txt") dfnew.show(2)
可以使用 Glue 直接从 s3 加载数据:
sourceDyf = glueContext.create_dynamic_frame_from_options(
connection_type="s3",
format="csv",
connection_options={
"paths": ["s3://bucket/folder"]
},
format_options={
"withHeader": True,
"separator": ","
})
您也可以只使用 spark 来做到这一点(正如您已经尝试过的那样):
sourceDf = spark.read
.option("header","true")
.option("delimiter", ",")
.csv("C:\inputs\TEST.txt")
但是,在这种情况下,Glue 不保证他们提供合适的 Spark 阅读器。因此,如果您的错误与缺少 CSV 数据源有关,那么您应该添加 spark-csv lib to the Glue job by providing s3 path to its locations via --extra-jars 参数。
以下2个案例我测试工作正常:
将文件从 S3 加载到 Glue。
dfnew = glueContext.create_dynamic_frame_from_options("s3", {'paths': ["s3://MyBucket/path/"] }, format="csv" )
dfnew.show(2)
从已通过 Glue Crawlers 生成的 Glue 数据库和表加载数据。
DynFr = glueContext.create_dynamic_frame.from_catalog(database="test_db", table_name="test_table")
DynFr 是一个 DynamicFrame,所以如果我们想在 Glue 中使用 Spark 代码,那么我们需要将它转换成如下所示的普通数据帧。
df1 = DynFr.toDF()