AWS Glue 从源中检索数据,并将数据写入以各种数据格式存储和传输的目标。如果数据以 ORC 数据格式存储或传输,本文档将向您介绍在 AWS Glue 中使用数据时可用的功能。
AWS Glue 支持使用 ORC 格式。此格式是一种以性能为导向、基于列的数据格式。有关标准颁发机构对该格式的简介,请参阅 Apache Orc。
您可以使用 AWS Glue 从 Amazon S3 和流式传输源读取 ORC 文件,以及将 ORC 文件写入 Amazon S3。您可以读取并写入包含 S3 中的 ORC 文件的 bzip
和 gzip
存档。请在 S3 连接参数 上而非本页中讨论的配置中配置压缩行为。
下表展示了支持 ORC 格式选项的常见 AWS Glue 操作。
读取 |
写入 |
流式处理读取 |
对小文件进行分组 |
作业书签 |
支持 |
支持 |
支持 |
不支持 |
支持* |
* 在 AWS Glue 1.0 以上版本中受支持
先决条件:需要待读取的 ORC 文件或文件夹的 S3 路径 (s3path
)。
配置:在函数选项中,请指定 format="orc"
。在您的 connection_options
中,请使用 paths
键指定 s3path
。您可以在 connection_options
中配置读取器与 S3 的交互方式。有关详细信息,请参阅 AWS Glue 中 ETL 的连接类型和选项:Amazon S3 连接选项参考。
以下 AWS 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 的交互方式。有关详细信息,请参阅 AWS 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
映射参数传递给它。