Apache spark PySpark:应用regex删除不需要的文本并使输入成为有效的JSON
我有一个JSON文件,不幸的是每行前面都有一些不需要的文本:Apache spark PySpark:应用regex删除不需要的文本并使输入成为有效的JSON,apache-spark,pyspark,Apache Spark,Pyspark,我有一个JSON文件,不幸的是每行前面都有一些不需要的文本: 2019-07-02T22:53:16.848Z LOGFILE {"key":{"host":"example1.net","srcIP":"1.0.0.0","dstIp":"2.0.0.0"},"count":4,"last_seen":"2019-07-02T22:48:15.362Z"} 2019-07-02T22:53:16.937Z LOGFILE {"key":{"host":"example2.net","srcIP
2019-07-02T22:53:16.848Z LOGFILE {"key":{"host":"example1.net","srcIP":"1.0.0.0","dstIp":"2.0.0.0"},"count":4,"last_seen":"2019-07-02T22:48:15.362Z"}
2019-07-02T22:53:16.937Z LOGFILE {"key":{"host":"example2.net","srcIP":"1.0.0.1","dstIp":"2.0.0.1"},"count":2,"last_seen":"2019-07-02T22:53:07.018Z"}
......
我想按如下方式加载此文件:
从pyspark.sql导入SparkSession,SQLContext
火花=火花会话\
建筑商先生\
.appName(“LogParser”)\
.getOrCreate()
sc=spark.SparkContext()
sqlContext=sqlContext(sc)
df=sqlContext.read.json('log\u sample.json')
但是需要一种方法来删除那些不需要的文本,例如,
2019-07-02T22:53:16.848Z日志文件
,首先使其成为有效的JSON。在我调用sqlContext.read.json()
之前,您能解释一下如何应用正则表达式吗?否则它会抱怨它是\u损坏的\u记录
。非常感谢 在这种情况下,您必须使用textFile加载整个文件,然后将字符串拆分为json,然后从中创建数据帧
下面的代码片段可能很有用
log_path = './log.txt'
# Load each line to pair rdd
pair_rdd = sc.textFile(log_path)
# Split str from pair rdd and create new rdd of json string
# You can do more thing with it
json_rdd = pair_rdd.map(lambda x: x.split(' LOGFILE ')[1])
# Convert json rdd to DF
original_df = hive_context.read.json(json_rdd)
original_df.printSchema()
读取以空格分隔的文件,删除前2列并再次保存为json。如果这对你有用,试试看
df=spark.read.csv("file.json",sep=" ").drop("_c0","_c1")
df.write.json("yourjasonfile.json")
根据您的解决方案,我使用了
json\u rdd=pair\u rdd.map(lambda x:re.sub(r“^.*”,“”,x))
来计算它。谢谢你的灵感。