如何在加入pyspark数据帧时提高性能
我有2个pyspark DataFrames,第一个包含如何在加入pyspark数据帧时提高性能,pyspark,apache-spark-sql,query-performance,Pyspark,Apache Spark Sql,Query Performance,我有2个pyspark DataFrames,第一个包含~500.000行,第二个包含~300.000行。我做了2次连接,在第二次连接中,将从第二个数据帧(300.000行)中逐单元格获取,并将其与第一个数据帧(500.000行)中的所有单元格进行比较 所以,有一个非常缓慢的连接。我在加入之前广播了数据帧 测试1: df_join = df1.join(F.broadcast(df2), df1.String.contains(df2["search.subString"]), "left")
~500.000行
,第二个包含~300.000行
。我做了2次连接,在第二次连接中,将从第二个数据帧(300.000行)中逐单元格获取,并将其与第一个数据帧(500.000行)中的所有单元格进行比较
所以,有一个非常缓慢的连接。我在加入之前广播了数据帧
测试1:
df_join = df1.join(F.broadcast(df2), df1.String.contains(df2["search.subString"]), "left")
这项工作花了好几个小时才完成
测试2:
df_join = F.broadcast(df1).join(F.broadcast(df2), df1.String.contains(df2["search.subString"]), "left")
运行速度比上面的第一个代码慢,所以性能很差
我试图在加入之前缓存数据帧
我用过:
df.cache()
用于每个数据帧。但是,性能总是不好
我试图仅在内存中使用持久化:
df.persist(MEMORY_ONLY) ==> NameError: global name 'MEMORY_ONLY' is not defined
df.persist(StorageLevel.MEMORY_ONLY) ==> NameError: global name 'StorageLevel' is not defined
如何在内存中持久化数据帧
你能给我建议一个提高性能的解决方案吗
提前谢谢 使用
df=df.cache()
打印(df.count())
基本上,您需要调用一个操作来获得缓存的效果。从pyspark.sql导入StorageLevel
,您必须导入moduleA regex类型的连接将总是非常缓慢。你不能在python中合并它吗?@samkart我已经添加了它,但是我得到了错误:ImportError:无法导入名称StorageLevelAh!我想应该是pyspark import StorageLevel的。
@samkart嗨,你对这个问题有什么想法吗?谢谢