如何将[]格式的列表转换为()格式

时间:2017-11-01 21:08:15

标签: python pyspark pyspark-sql

我有一个包含几亿条记录的大型数据框。我只想要10%的df,所以我在阅读时过滤了df。过滤条件是动态的,并且从一个实验变为另一个实验。

我还有另一个df来获取过滤器值:

filter = "filter_condition in" + tuple(df1.select("xxx").rdd.flatMap(lambda x: x).collect())

上面的代码段给出了一个列表,例如[1]

我使用以下查询来读取大文件:

large_df = (sqlContext.read.parquet(path).filter(filter))

当元组有超过1个元素时,查询工作正常,但当过滤条件只有1个值时,元组出现为(1,)或(10293,)等,这会导致读取大错误df,因为过滤条件出来

(sqlContext.read.parquet(path).filter("filter_condition in (1,)"))

有没有办法将列表[1]转换为(1)格式。感谢

1 个答案:

答案 0 :(得分:2)

它必须是这样的,因为括号中的一个元素只是被解析为括号,并且您需要逗号来创建一个元组元组。

您可以通过制作自定义字符串化方法来解决此问题:

def tuple_to_str(t):
    t = tuple(t)
    if len(t) == 1:
        return '({!r})'.format(t[0])
    return repr(t)

并且正在做:

filter = "filter_condition in" + tuple_to_str(
    df1.select("xxx").rdd.flatMap(lambda x: x).collect()
)
相关问题