pyspark错误:java.lang.RuntimeException:[1.18]失败:预期的标识符

时间:2016-10-12 19:50:32

标签: python apache-spark pyspark apache-spark-sql

我想对ABC的组织中的人员和ABC的分支名称进行过滤:

 people.filter(" orgnization = ABC\'S and branch like '%ABC\'S%'  ").show()

这是我得到的错误

Py4JJavaError: An error occurred while calling o47.filter.
: java.lang.RuntimeException: [1.18] failure: identifier expected

1 个答案:

答案 0 :(得分:0)

你应该:

  • 将所有字符串括在单引号或双引号内。
  • 取决于封闭引号的选择,转义嵌入式引号和反斜杠。

让我们通过例子解释一下。这是数据:

df = sc.parallelize([("ABC'S", "FOO ABC'S")]).toDF(["organization", "branch"])

如果您决定使用单引号,则必须转义嵌入式引号以及反斜杠。

df.filter("""organization='ABC\\'S' and branch like '%ABC\\'S%'""")

如果你决定使用双引号,你可以完全跳过逃避:

df.filter('''organization="ABC'S"  and branch like "%ABC'S%"''')

通常,您可以通过使用方法调用替换SQL字符串来节省大量的故障排除:

df.where((df["organization"] == "ABC'S") & df["branch"].like("%ABC'S"))