Apache spark PySpark:应用regex删除不需要的文本并使输入成为有效的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

我有一个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":"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))
来计算它。谢谢你的灵感。