我有一堆文件,每行代码如下:
some random non json stuff here {"timestmap":21212121, "name":"John"}
我无法将这些文件作为json读取,因为Json数据之前存在随机的东西。
清除随机内容以便能够将Json数据加载到具有适当列的DF中的最佳方法是什么?
最终目标是使最终DF只包含时间戳在特定日期之间的数据。
此解决方案使用
instr找到JSON curly braces的出现{and}
substr 获取JSON curly braces之间的子串(JSON文本)
然后它使用from_json定义预期JSON结构的模式。
from pyspark.sql.functions import from_json, instr
from pyspark.sql.types import *
schema = StructType([StructField("timestmap", TimestampType()),
StructField("name", StringType())])
parsed = df.select(from_json(
df.value.substr(instr(df.value, '{'), instr(df.value, '}')),
schema).alias("json"))
parsed = parsed.select(F.col("json.timestmap").alias("timestmap"),
F.col("json.name").alias("name"))
parsed.printSchema()
parsed.show()
结果是
root
|-- timestmap: timestamp (nullable = true)
|-- name: string (nullable = true)
timestmap | name |
---|---|
1970-09-03 12:15:21 | John |
1970-09-03 12:15:22 | Doe |
示例文本文件random.txt是
some random non json stuff here {"timestmap":21212121, "name":"John"}
some other random non json stuff here {"timestmap":21212122, "name":"Doe"}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。