不匹配的令牌异常配置单元查询



我有一个由这个python/spark函数创建的分隔字符串:

singleStringOfDelimitedNames= '|'.join([str(x.asDict().values()[0])  for x in
df3.collect()])

假设它说"Dan|苏茜·安|鲍勃。 当我将此字符串传递到我创建的这个 Hive UDF 时,

df2 = sqlContext.sql("""SELECT field1, field2
FROM
refinedTable
WHERE
createdHiveUDF({0}, {1}, cast(field1 as string), cast(field2 as string))
""".format(percentage, singleStringOfDelimitedNames))

我收到不匹配的令牌异常 (26!=301(。 u"不匹配的输入'Ann'期望(在函数规范中的"Susie"附近。

让我感到困惑的是,当我硬编码"Dan|苏茜·安|鲍勃",如下所示,一切都按我的预期进行。

df2 = sqlContext.sql("""SELECT field1, field2
FROM
refinedTable
WHERE
createdHiveUDF({0}, 'Dan|Susie Ann|Bob', cast(field1 as string), cast(field2 as string))
""".format(percentage))

我假设我要么错误地使用 .format,要么我必须找到一个不同的 python/spark 函数来从一列名称中创建单个分隔字符串。 如果有人能帮助我理解这个不匹配的令牌异常,以及为什么上面的硬编码避免了这个问题,我将不胜感激。

你不缺少单引号吗?

df2 = sqlContext.sql("""SELECT field1, field2
FROM
refinedTable
WHERE
createdHiveUDF({0}, '{1}', cast(field1 as string), cast(field2 as string))
""".format(percentage, singleStringOfDelimitedNames))

最新更新