不匹配的令牌异常Hive查询

时间:2017-08-18 16:09:43

标签: python hadoop hive pyspark hiveql

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

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

让它说“Dan | Susie Ann | Bob。' 当我将此String传递给我创建的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)。你输入不匹配'安'期待着苏茜'在功能规范中。

让我感到困惑的是,当我硬编码时,Dan | Susie Ann | Bob,"如下所示,一切都按照我的意图运作。

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函数来从名称列创建单个分隔的字符串。如果有人能帮助我理解这个不匹配的令牌异常,以及为什么上面的硬编码避免了这个问题,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

你不是缺少单引号吗?

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