繁体   English   中英

优化Apache Spark SQL查询

[英]Optimizing Apache Spark SQL Queries

运行某些SQL查询时,我在Apache Spark上面临很长的等待时间。 为了简化查询,我按顺序运行计算:每个查询的输出存储为临时表(.registerTempTable('TEMP')),因此可以在以下SQL查询中使用它,依此类推。 ..但是查询需要太多时间,而在“ Pure Python”代码中,仅需几分钟。

 sqlContext.sql(""" SELECT PFMT.* , DICO_SITES.CodeAPI FROM PFMT INNER JOIN DICO_SITES ON PFMT.assembly_department = DICO_SITES.CodeProg """).registerTempTable("PFMT_API_CODE") sqlContext.sql(""" SELECT GAMMA.*, (GAMMA.VOLUME*GAMMA.PRORATA)/100 AS VOLUME_PER_SUPPLIER FROM (SELECT PFMT_API_CODE.* , SUPPLIERS_PROP.CODE_SITE_FOURNISSEUR, SUPPLIERS_PROP.PRORATA FROM PFMT_API_CODE INNER JOIN SUPPLIERS_PROP ON PFMT_API_CODE.reference = SUPPLIERS_PROP.PIE_NUMERO AND PFMT_API_CODE.project_code = SUPPLIERS_PROP.FAM_CODE AND PFMT_API_CODE.CodeAPI = SUPPLIERS_PROP.SITE_UTILISATION_FINAL) GAMMA """).registerTempTable("TEMP_ONE") sqlContext.sql(""" SELECT TEMP_ONE.* , ADCP_DATA.* , CASE WHEN ADCP_DATA.WEEK <= weekofyear(from_unixtime(unix_timestamp())) + 24 THEN ADCP_DATA.CAPACITY_ST + ADCP_DATA.ADD_CAPACITY_ST WHEN ADCP_DATA.WEEK > weekofyear(from_unixtime(unix_timestamp())) + 24 THEN ADCP_DATA.CAPACITY_LT + ADCP_DATA.ADD_CAPACITY_LT END AS CAPACITY_REF FROM TEMP_ONE INNER JOIN ADCP_DATA ON TEMP_ONE.reference = ADCP_DATA.PART_NUMBER AND TEMP_ONE.CodeAPI = ADCP_DATA.API_CODE AND TEMP_ONE.project_code = ADCP_DATA.PROJECT_CODE AND TEMP_ONE.CODE_SITE_FOURNISSEUR = ADCP_DATA.SUPPLIER_SITE_CODE AND TEMP_ONE.WEEK_NUM = ADCP_DATA.WEEK_NUM """ ).registerTempTable('TEMP_BIS') sqlContext.sql(""" SELECT TEMP_BIS.CSF_ID, TEMP_BIS.CF_ID , TEMP_BIS.CAPACITY_REF, TEMP_BIS.VOLUME_PER_SUPPLIER, CASE WHEN TEMP_BIS.CAPACITY_REF >= VOLUME_PER_SUPPLIER THEN 'CAPACITY_OK' WHEN TEMP_BIS.CAPACITY_REF < VOLUME_PER_SUPPLIER THEN 'CAPACITY_NOK' END AS CAPACITY_CHECK FROM TEMP_BIS """).take(100) 

任何人都可以重点介绍(如果有)在Spark上编写pyspark SQL查询的最佳实践吗? 在我的计算机上本地脚本比在Hadoop集群上快得多有意义吗? 提前致谢

您应该缓存中间结果,数据源是什么? 您可以仅从中检索相关数据还是仅检索相关列? 您应该选择许多选项,以提供有关数据的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM