生成和执行命令的循环不起作用

2024-09-28 22:30:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我的pyspark脚本有以下代码。我试图生成一个查询,每次都用不同的值i运行它。查询应该选择嵌套的JSON元素并计算大小(即出现的次数)。我计算它是为了帮助我对最终的表进行单元测试,我将使用“explode”功能单独创建这个表

for i in range(1,10) : 
onerowDF = spark.sql("""SELECT items['responses'][i]['id'] as items_response_id, items['responses'][i]['name'] as responses_name FROM responses""")
onerowDf.select(size("items_response_id"), size("responses_name")).show()

运行此命令时出错:

AnalysisException: u"cannot resolve '`i`' given input columns: [hasMore, items, total]; line 1 pos 74;\n'Project [items#1.id AS items_id#149, items#1.responseTime AS items.responseTime#154, items#1.responses['i][id] AS items_response_id#150, items#1.responses['i][name] AS responses_name#151, items#1.responses['i][type] AS responses_type#152, items#1.responses['i][answers] AS responses_answers#153]\n+- SubqueryAlias responses\n   +- Relation[hasMore#0,items#1,total#2L] json\n"

我故意从上面的代码中删除了一些元素以使其更简单,这就是为什么错误在这里列出的元素比我的代码多。你知道吗

那么,为什么我不能在每个查询中替换I的值,然后运行这两条语句并得到结果呢?你知道吗


Tags: 代码nameid元素sizeresponseastype
2条回答

Python如何知道字符串中的i引用的是变量而不是简单的字母?Python没有Bash那样复杂的插值规则。你知道吗

你得说清楚。最简单的方法是使用f字符串。你知道吗

for i in range(1,10) : 
    onerowDF = spark.sql(f"""SELECT items['responses'][{i}]['id'] as items_response_id, 
           items['responses'][{i}]['name'] as responses_name FROM responses""")
    onerowDf.select(size("items_response_id"), size("responses_name")).show()
for i in range(1,10) : 
    onerowDF = spark.sql("SELECT items['responses']["+i+"]['id'] as items_response_id, 
           items['responses']["+i+"]['name'] as responses_name FROM responses")")
    onerowDf.select(size("+items_response_id+"), size("+responses_name+")).show()

确保连接变量。不要包含在字符串中。不要使用"...i...",而要确保使用"..."+i+"...."。 如果你有另一个我你正在使用可能我错了。还要检查

 "onerowDf.select(size("+items_response_id+"), `size("+responses_name+")).show()"`

相关问题 更多 >