PySpark按user_value循环拆分创建表失败,求正确实现方法
解决Spark循环按user_value拆分数据表的问题
你的代码核心问题是循环时错误地使用了整个列表user_list进行字符串格式化,而非当前迭代的user_value变量,导致SQL条件变成user_value = '[1,2,3,4]',完全匹配不到数据,最终生成空表。
修正后的代码
user_list = [1,2,3,4] for user_value in user_list: # 用当前迭代的user_value作为筛选条件,数值类型无需加单引号 SQL_tbl = spark.sql('SELECT * FROM TBL WHERE user_value = {}'.format(user_value)) # 表名也使用当前user_value命名,确保每个表对应唯一值 SQL_tbl.write.mode("overwrite")\ .option("overwriteSchema", "true")\ .saveAsTable('temp_tbl_{}'.format(user_value), format='delta')
优化建议(针对1-15的完整范围)
如果需要处理1到15的所有user_value,无需手动构造列表,直接用range生成范围更高效:
for user_value in range(1, 16): SQL_tbl = spark.sql('SELECT * FROM TBL WHERE user_value = {}'.format(user_value)) SQL_tbl.write.mode("overwrite")\ .option("overwriteSchema", "true")\ .saveAsTable('temp_tbl_{}'.format(user_value), format='delta')
注意事项
如果你的user_value字段是字符串类型,需要在SQL条件中给值加上单引号,写法调整为:
SQL_tbl = spark.sql('SELECT * FROM TBL WHERE user_value = \'{}\''.format(user_value))
内容的提问来源于stack exchange,提问作者bockbock
相关产品推荐
相关产品推荐

