在 Apache Flink 的 Python DataStream API 中,一种数据类型描述 DataStream 生态系统中数据的类型。 数据类型可用于声明算子输入和输出的类型,并告知系统如何对数据进行序列化。
如果类型没有被定义,数据将使用 Pickle 进行序列化和反序列化。 例如,以下程序没有指定数据类型。
但是,在下列情况下需要指定类型:
由于 Java 算子或函数不能识别 Python 数据,因此需要提供数据类型来将 Python 类型转换为 Java 类型以进行处理。 例如,如果你想要使用 Java 实现的 StreamingFileSink 输出数据,则需要提供数据类型。
尽管可以通过 Pickle 序列化和反序列化数据,但是如果提供了确定的类型,性能会更好。 当在 pipeline 中传递数据时,显式类型允许 PyFlink 使用更高效的序列化器。
你可以使用 pyflink.common.typeinfo.Types
在 Python DataStream API 中指定类型.
下面列出了现在支持的类型以及如何定义它们:
PyFlink 类型 | 使用 | 对应 Python 类型 |
---|---|---|
BOOLEAN |
Types.BOOLEAN() |
bool |
SHORT |
Types.SHORT() |
int |
INT |
Types.INT() |
int |
LONG |
Types.LONG() |
int |
FLOAT |
Types.FLOAT() |
float |
DOUBLE |
Types.DOUBLE() |
float |
CHAR |
Types.CHAR() |
str |
BIG_INT |
Types.BIG_INT() |
bytes |
BIG_DEC |
Types.BIG_DEC() |
decimal.Decimal |
STRING |
Types.STRING() |
str |
BYTE |
Types.BYTE() |
int |
TUPLE |
Types.TUPLE() |
tuple |
PRIMITIVE_ARRAY |
Types.PRIMITIVE_ARRAY() |
list |
ROW |
Types.ROW() |
dict |