如何一次性获取多个OpCo_code?Spark SQL查询仅返回单结果求助
解决Spark SQL获取全部OpCo_code的问题
问题根源
你当前代码里的.collect()[0][0]直接取了查询结果的第一行第一列,所以只能拿到单个匹配值,自然看不到其他的OPCOCode。
修改方案
把代码改成提取所有行的OPCOCode,存入列表:
# 执行查询获取全部匹配结果 opco_rows = spark.sql(f""" SELECT OPCOCode FROM delta.`/{SALES_ORG_REFERENCE_OBJECT}` WHERE ForecastUnitCode = "{SalesOrg_row['ProductKeyCode']}" AND SalesOrganisationCode = "{SalesOrg_row['SalesOrganisationCode']}" AND RegionID = "{SalesOrg_row['RegionID']}" """).collect() # 从每行中提取OPCOCode,生成完整列表 OpCo_codes = [row['OPCOCode'] for row in opco_rows] # 打印所有结果 print(OpCo_codes)
执行后会输出所有匹配的OPCOCode,比如['HP', 'IC', 'FD', 'UF']。
可选优化
如果你的数据量很大,collect()会把所有数据拉到Driver节点,可能导致内存不足。如果只需要去重后的OPCOCode,可以在SQL中添加DISTINCT关键字减少返回数据量:
SELECT DISTINCT OPCOCode FROM delta.`/{SALES_ORG_REFERENCE_OBJECT}` WHERE ForecastUnitCode = "{SalesOrg_row['ProductKeyCode']}" AND SalesOrganisationCode = "{SalesOrg_row['SalesOrganisationCode']}" AND RegionID = "{SalesOrg_row['RegionID']}"
内容的提问来源于stack exchange,提问作者KIRAN KUMAR
相关产品推荐
相关产品推荐

