我正在尝试从一个json文件创建一个数据帧,其中包含一个月的网络通信并收到OOM错误。读指令包含的过滤器将大大减少记录数量。
process_df = (spark.read.json(input_file)
.filter((F.col("initiated") == "true")
& ((F.col("dest_port") == "80")
| (F.col("dest_port") == "443"))))
process_df.count()
我认为尽管实现了惰性评估,但实现方式还是是将数据读入执行程序,然后在调用count时将过滤器用作转换?这是正确的吗?
我确实尝试通过添加
来解决内存问题。.persist(StorageLevel.DISK_ONLY)
但这导致挂起的作业,其中包含大量的rpc错误。
我认为我的解决方案是读取较小的数据块,过滤然后合并。我真的是想了解我关于Spark运作方式的思维模型是否正确。