我正在尝试将cef文件映射到数据帧,最终映射到输出文件。我得到RuntimeError: dictionary changed size during iteration
。
我尝试了以下解决方案:1,2,3,4等。我什至不确定该字典在哪里(在lambda中错误)。我不相信这是其他人的重复,因为我没有在代码中的任何地方显式地使用字典,因此调用.keys()
或.items()
不是一个选择
我用cef access and security events示例创建了一个简单的文本文件:
然后我运行以下代码:
import pyspark
from pyspark.sql import SparkSession
from pyspark.streaming import StreamingContext
sc = SparkContext('local[2]','NetworkLog')
spark = SparkSession(sc)
target_data = sc.textFile('log.txt')
import re
def parse(str_input):
...
return values
parsed = target_data.map(lambda line:parse(line))
df = parsed.map(lambda x: (x['rt'],x['dst'],x['dhost'],x['act'],x['suser'],x['requestClientApplication'],x['threat name'],x['DeviceSeverity'],x['riskscore'])).toDF(['source_time','ip','host_name','act','suser','requestClientApplication','threatname','DeviceSeverity','riskscore'])
*解析器找到here
这可能是一个单独的问题,但是有时parsed
中的值缺失/null/0.0.0时代码会中断,因此我还需要一种将null或0.0.0写入数据帧的方法