【发布时间】:2016-09-01 02:05:17
【问题描述】:
我的 json 数据看起来像这样(每行 1 个对象):
{
"id": "c428c2e2-c30c-4864-8c12-458ead4b17f5",
"weight": 73,
"topics": {
"type": 1,
"values": [
1,
2,
3
]
}
}
当我在没有指定架构的情况下读取数据时,Spark 将 topics.values 推断为 ArrayType,但我需要它作为 VectorUDT 来执行 ML 任务。所以我尝试使用如下模式读取数据集:
schema = StructType([
StructField("id", StringType()),
StructField("weight", IntegerType()),
StructField("topics", StructType([
StructField("type", IntegerType()),
StructField("values", VectorUDT())
]))
])
当我这样做时,我看到数据框的类型(使用dtype)如下:
[('id', 'string'), ('weight', 'int'), ('topics', 'struct<type:int,values:vector>')]
但数据框中似乎没有实际数据,如使用first()所示:
Row(id=None, weight=None, topics=None)
当我将数据帧写入磁盘时,我只看到每一行都有空括号。似乎很奇怪!我做错了什么?
【问题讨论】:
-
这并不奇怪。您传递的模式不适用于 JSON 文档。
-
@LostInOverflow 你能详细说明一下吗?显然我在这里问一个问题,因为我不知道。
-
@LostInOverflow 好吧,您的评论确实让我意识到如何正确地做到这一点。非常感谢。
-
很高兴它有帮助,很抱歉我没有更明确的建议。
标签: apache-spark pyspark