加入 pyspark Dataframes 时如何提高性能
How improve performance when join pyspark Dataframes
我有 2 个 pyspark Dataframess,第一个包含 ~500.000 rows
,第二个包含 ~300.000 rows
。我做了 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")
运行比上面第一个代码慢很多,所以性能很差。
我在加入前尝试 to cache the dataframes
。
我用过:
df.cache()
每个数据帧。但是,成绩总是不好。
我尝试使用 persist in memory_only
:
df.persist(MEMORY_ONLY) ==> NameError: global name 'MEMORY_ONLY' is not defined
df.persist(StorageLevel.MEMORY_ONLY) ==> NameError: global name 'StorageLevel' is not defined
如何将 Dataframe 保存在内存中?
你能给我一个提高性能的解决方案吗?
提前致谢。
使用
df=df.cache()
打印(df.count())
基本上需要调用一个action才能达到缓存的效果
我有 2 个 pyspark Dataframess,第一个包含 ~500.000 rows
,第二个包含 ~300.000 rows
。我做了 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")
运行比上面第一个代码慢很多,所以性能很差。
我在加入前尝试 to cache the dataframes
。
我用过:
df.cache()
每个数据帧。但是,成绩总是不好。
我尝试使用 persist in memory_only
:
df.persist(MEMORY_ONLY) ==> NameError: global name 'MEMORY_ONLY' is not defined
df.persist(StorageLevel.MEMORY_ONLY) ==> NameError: global name 'StorageLevel' is not defined
如何将 Dataframe 保存在内存中?
你能给我一个提高性能的解决方案吗?
提前致谢。
使用
df=df.cache()
打印(df.count())
基本上需要调用一个action才能达到缓存的效果