我想用类似 SQL 的 IN
子句过滤 Pyspark DataFrame,如
sc = SparkContext()
sqlc = SQLContext(sc)
df = sqlc.sql('SELECT * from my_df WHERE field1 IN a')
其中 a
是元组 (1, 2, 3)
。我收到此错误:
java.lang.RuntimeException: [1.67] failure: ``(” 预期但发现标识符 a
这基本上是说它期待像 ‘(1,2,3)’ 而不是a。问题是我无法在 a 中手动写入值,因为它是从另一个作业中提取的。
在这种情况下我将如何过滤?
原文由 mar tin 发布,翻译遵循 CC BY-SA 4.0 许可协议
您传递给的字符串
SQLContext
它在 SQL 环境的范围内进行了评估。它没有捕获关闭。如果要传递变量,则必须使用字符串格式明确地进行:显然,出于安全考虑,这不是您在“真实”SQL 环境中使用的东西,但在这里应该无关紧要。
在实践中
DataFrame
当您想要创建动态查询时,DSL 是一个更好的选择:它很容易为您构建、编写和处理 HiveQL / Spark SQL 的所有细节。