Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon Glue 从源中检索数据,并将数据写入以各种数据格式存储和传输的目标。如果数据以 ORC 数据格式存储或传输,本文档将向您介绍在 Amazon Glue 中使用数据时可用的功能。
Amazon Glue 支持使用 ORC 格式。此格式是一种以性能为导向、基于列的数据格式。有关标准颁发机构对该格式的简介,请参阅 Apache Orc。
您可以使用 Amazon Glue 从 Amazon S3 和流式传输源读取 ORC 文件,以及将 ORC 文件写入 Amazon S3。您可以读取并写入包含 S3 中的 ORC 文件的 bzip
和 gzip
存档。请在 S3 连接参数 上而非本页中讨论的配置中配置压缩行为。
下表展示了支持 ORC 格式选项的常见 Amazon Glue 操作。
读取 |
写入 |
流式处理读取 |
对小文件进行分组 |
作业书签 |
支持 |
支持 |
支持 |
不支持 |
支持* |
* 在 Amazon Glue 1.0 以上版本中受支持
先决条件:需要待读取的 ORC 文件或文件夹的 S3 路径 (s3path
)。
配置:在函数选项中,请指定 format="orc"
。在您的 connection_options
中,请使用 paths
键指定 s3path
。您可以在 connection_options
中配置读取器与 S3 的交互方式。有关详细信息,请参阅 Amazon Glue 中 ETL 的连接类型和选项:Amazon S3 连接选项参考。
以下 Amazon Glue ETL 脚本展示了从 S3 读取 ORC 文件或文件夹的过程:
- Python
-
在本示例中,使用 create_dynamic_frame.from_options 方法。
from pyspark.context import SparkContext
from awsglue.context import GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)
dynamicFrame = glueContext.create_dynamic_frame.from_options(
connection_type="s3",
connection_options={"paths": ["s3://s3path
"]},
format="orc"
)
您还可以使用脚本(pyspark.sql.DataFrame
)中的 DataFrames。
dataFrame = spark.read\
.orc("s3://s3path
")
- Scala
-
在本示例中,使用 getSourceWithFormat 操作。
import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.GlueContext
import org.apache.spark.sql.SparkContext
object GlueApp {
def main(sysArgs: Array[String]): Unit = {
val spark: SparkContext = new SparkContext()
val glueContext: GlueContext = new GlueContext(spark)
val dynamicFrame = glueContext.getSourceWithFormat(
connectionType="s3",
format="orc",
options=JsonOptions("""{"paths": ["s3://s3path
"]}""")
).getDynamicFrame()
}
}
您还可以使用脚本(pyspark.sql.DataFrame
)中的 DataFrames。
val dataFrame = spark.read
.orc("s3://s3path
")
先决条件:您将需要一个初始化的 DataFrame(dataFrame
)或 DynamicFrame(dynamicFrame
)。您还需要预期 S3 输出路径 s3path
。
配置:在函数选项中,请指定 format="orc"
。在连接选项中,使用 paths
密钥指定 s3path
。您可以在 connection_options
中进一步修改编写器与 S3 的交互方式。有关详细信息,请参阅 Amazon Glue:Amazon S3 连接选项参考 中的“Data format options for ETL inputs and outputs”(ETL 输入和输出的数据格式选项)。以下代码示例展示了这个过程:
- Python
-
在本示例中,使用 write_dynamic_frame.from_options 方法。
from pyspark.context import SparkContext
from awsglue.context import GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)
glueContext.write_dynamic_frame.from_options(
frame=dynamicFrame
,
connection_type="s3",
format="orc",
connection_options={
"path": "s3://s3path
"
}
)
您还可以使用脚本(pyspark.sql.DataFrame
)中的 DataFrames。
df.write.orc("s3://s3path
/")
- Scala
-
在本示例中,请使用 getSinkWithFormat 方法。
import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.{DynamicFrame, GlueContext}
import org.apache.spark.SparkContext
object GlueApp {
def main(sysArgs: Array[String]): Unit = {
val spark: SparkContext = new SparkContext()
val glueContext: GlueContext = new GlueContext(spark)
glueContext.getSinkWithFormat(
connectionType="s3",
options=JsonOptions("""{"path": "s3://s3path
"}"""),
format="orc"
).writeDynamicFrame(dynamicFrame
)
}
}
您还可以使用脚本(pyspark.sql.DataFrame
)中的 DataFrames。
df.write.orc("s3://s3path
/")
没有适用于 format="orc"
的 format_options
值。不过,基础 SparkSQL 代码所接受的任何选项均可通过 connection_options
映射参数传递给它。