我有一个由这个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))