Apache spark 为什么spark python udf在不同分区策略上的执行时间相差10倍?

Apache spark 为什么spark python udf在不同分区策略上的执行时间相差10倍?,apache-spark,dataframe,pyspark,apache-spark-sql,udf,Apache Spark,Dataframe,Pyspark,Apache Spark Sql,Udf,我得到了巨大的(超过10倍~100倍)两个作业之间的执行时间差,只是分区策略不同,我想知道为什么:) 观察: 按分区号重新分区时,均衡记录的运行速度比2慢10~100倍 按列重新分区:电话\国家\代码 从spark历史来看,唯一的区别是1。获得较小的较大(10~20%)随机读取大小 我的环境: EMR 4.7上的Spark 1.6.1 Python 2.7 使用pyspark提交作业 火花工作: python udf解析时区信息的电话号码 通过spark redshift从redshift

我得到了巨大的(超过10倍~100倍)两个作业之间的执行时间差,只是分区策略不同,我想知道为什么:)

观察:

  • 按分区号重新分区时,均衡记录的运行速度比2慢10~100倍
  • 按列重新分区:电话\国家\代码
  • 从spark历史来看,唯一的区别是1。获得较小的较大(10~20%)随机读取大小
  • 我的环境:

    • EMR 4.7上的Spark 1.6.1
    • Python 2.7
    • 使用pyspark提交作业
    火花工作:

    • python udf解析时区信息的电话号码
    • 通过spark redshift从redshift读取数据并写回
    代码示例:

    数据样本:

    phone_number, phone_country_code
    55-82981399971, 55
    1-7073492922, 1
    90-5395889859, 90
    
    我猜:

    • 在udf上的JVMPY级别上进行一些优化,这取决于分区的记录分布

    感谢您的进一步建议:)

    phonenumber\u util在策略1中需要处理所有国家/地区代码,而在策略2中只需要处理部分国家/地区代码。不确定phonenumber_util如何意识到这一差异,请尝试使用
    df。解释
    以显示这两种方法的执行计划。首先,如果要比较运行时,请在两种情况下使用相同数量的分区。
    
    phone_number, phone_country_code
    55-82981399971, 55
    1-7073492922, 1
    90-5395889859, 90