我正在尝试编写像
这样的结构的RDD(int,ListofList,ListofListofList)
像这样的东西
{"user":49807360,"history":[[111206019,null,null,null,123], [111206019,null,null,null,123]],"collection":...}
当我打印这是RDD表格时,我正确地看到了数据。当我使用内置库以JSON格式编写它时,我得到空值代替字符串。
rdd.toDF().toJSON().saveAsTextFile(ouput_file_path)
我用来将RDD序列化为JSON的代码行是
rdd.toDF().write.json(ouput_file_path,"overwrite","gzip")
我也试过
`Time (seconds) Temp Measured (C)
0.000000000000000000e+00 1.009099999999999966e+02
4.000000000000000000e+00 9.545999999999999375e+01
8.000000000000000000e+00 9.284999999999999432e+01
1.200000000000000000e+01 8.940999999999999659e+01
1.600000000000000000e+01 8.618000000000000682e+01
2.000000000000000000e+01 8.148999999999999488e+01
2.400000000000000000e+01 7.909999999999999432e+01
以上代码在spark版本2.0.0中运行
答案 0 :(得分:1)
这是因为您使用DataFrame
作为中间步骤。 Spark SQL不支持异构数组,因此不匹配推断类型(array<bigint>
)的值将被NULL
替换。
如果你真的想这样,并支持异构结构,你应该使用tuples
,它应该映射到Spark SQL structs
,或者不依赖于模式推理,以及明确提供所需的架构:
schema = ... # type: StructType
spark.createDataFrame(rdd, schema)
与架构(JSON representation)类似于:
{'fields': [{'metadata': {}, 'name': '_1', 'nullable': True, 'type': 'long'},
{'metadata': {},
'name': '_2',
'nullable': True,
'type': {'containsNull': True,
'elementType': {'fields': [{'metadata': {},
'name': '_1',
'nullable': True,
'type': 'long'},
{'metadata': {}, 'name': '_2', 'nullable': True, 'type': 'string'},
{'metadata': {}, 'name': '_3', 'nullable': True, 'type': 'string'},
{'metadata': {}, 'name': '_4', 'nullable': True, 'type': 'string'},
{'metadata': {}, 'name': '_5', 'nullable': True, 'type': 'long'}],
'type': 'struct'},
'type': 'array'}},
{'metadata': {},
'name': '_3',
'nullable': True,
'type': {'fields': [{'metadata': {},
'name': '_1',
'nullable': True,
'type': {'fields': [{'metadata': {},
'name': '_1',
'nullable': True,
'type': 'long'},
{'metadata': {}, 'name': '_2', 'nullable': True, 'type': 'string'},
{'metadata': {}, 'name': '_3', 'nullable': True, 'type': 'string'},
{'metadata': {}, 'name': '_4', 'nullable': True, 'type': 'string'},
{'metadata': {}, 'name': '_5', 'nullable': True, 'type': 'long'}],
'type': 'struct'}},
{'metadata': {}, 'name': '_2', 'nullable': True, 'type': 'long'},
{'metadata': {}, 'name': '_3', 'nullable': True, 'type': 'string'},
{'metadata': {}, 'name': '_4', 'nullable': True, 'type': 'string'},
{'metadata': {}, 'name': '_5', 'nullable': True, 'type': 'string'},
{'metadata': {}, 'name': '_6', 'nullable': True, 'type': 'long'}],
'type': 'struct'}},
{'metadata': {},
'name': '_4',
'nullable': True,
'type': {'containsNull': True,
'elementType': {'fields': [{'metadata': {},
'name': '_1',
'nullable': True,
'type': 'long'},
{'metadata': {}, 'name': '_2', 'nullable': True, 'type': 'string'},
{'metadata': {}, 'name': '_3', 'nullable': True, 'type': 'string'},
{'metadata': {}, 'name': '_4', 'nullable': True, 'type': 'string'},
{'metadata': {}, 'name': '_5', 'nullable': True, 'type': 'long'}],
'type': 'struct'},
'type': 'array'}}],
'type': 'struct'}