Pyspark模式中的StructType的VectorType是什么?

7
我正在读取一个具有以下模式的Parquet文件:
df.printSchema()

root
 |-- time: integer (nullable = true)
 |-- amountRange: integer (nullable = true)
 |-- label: integer (nullable = true)
 |-- pcaVector: vector (nullable = true)

现在我想测试Pyspark结构化流并且我想使用相同的parquet文件。我能够创建的最接近的模式是使用ArrayType,但它不起作用:

schema = StructType(
    [
        StructField('time', IntegerType()),
        StructField('amountRange', IntegerType()),
        StructField('label', IntegerType()),
        StructField('pcaVector', ArrayType(FloatType()))

    ]
)
df_stream = spark.readStream\
    .format("parquet")\
    .schema(schema)\
    .load("/home/user/test_arch/data/fraud/")

Caused by: java.lang.ClassCastException: Expected instance of group converter but got "org.apache.spark.sql.execution.datasources.parquet.ParquetPrimitiveConverter"
        at org.apache.parquet.io.api.Converter.asGroupConverter(Converter.java:37)
        at org.apache.spark.sql.execution.datasources.parquet.ParquetRowConverter$RepeatedGroupConverter.<init>(ParquetRowConverter.scala:659)
        at org.apache.spark.sql.execution.datasources.parquet.ParquetRowConverter.org$apache$spark$sql$execution$datasources$parquet$ParquetRowConverter$$newConverter(ParquetRowConverter.scala:308)

我该如何在Pyspark的StructType中使用似乎仅适用于Scala的VectorType来创建模式?

1个回答

8

数据类型为 VectorUDT

from pyspark.ml.linalg import VectorUDT

StructField('pcaVector', VectorUDT())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接