7

我正在尝试使用 pyspark 进行数据准备,其中包括字符串索引、一种热编码和分位数离散化等步骤。我的数据框在 100 万行中有很多列(1000 列,包括 500 个间隔列、250 个分类和 250 个二进制文件)。

我的观察是,某些数据转换比其他数据转换慢得多。正如下面的摘要所示,有些步骤甚至持续大约 3 小时,而其他步骤只需要几分钟

步骤(执行时间):

  • 所有区间变量的 Log10 转换 (00:02:22)
  • 数据帧的随机数据划分 (00:02:48)
  • 区间的分位数离散化和向量组装 ( 02:31:37 )
  • 一种用于分类的热编码和向量组装 ( 03:13:51 )
  • 二进制文件的字符串索引和向量组装 ( 03:17:34 )

似乎表现最差的步骤是字符串索引、一种热编码、分位数离散化或向量汇编器。

你能建议我在我的 spark 配置或代码中检查或调整什么以显着提高这些步骤的性能吗?

我使用了 Pyspark.ml.feature 中的上述特征工程步骤方法 QuantileDiscretizer、VectorAssembler、OneHotEncoder、StringIndexer。我确信数据已完全上传到集群内存中(persist(StorageLevel.MEMORY_ONLY))。

我的集群包含 7 个节点(每个节点 4 个内核和 16GB RAM)。Spark 版本是 2.2。使用 Pyspark。

应用 Spark 配置:

  • spark.serializer = org.apache.spark.serializer.KryoSerializer
  • spark.kryo.unsafe = true
  • spark.rdd.compress = false
  • 主人=纱线
  • 部署模式 = 集群
  • spark.driver.cores=4
  • 驱动内存 = 4G
  • 执行者数 = 6
  • 执行器内存 = 10G
  • 执行器核心 = 4
  • spark.yarn.maxAppAttempts=1
  • spark.sql.cbo.enabled=true
  • spark.sql.constraintPropagation.enabled=false
4

0 回答 0