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



我有一个包含几亿条记录的大型数据帧。我只想要 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,) 或 (10293,) 等,这会导致在读取大 df 时出错,因为过滤条件是

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

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

它需要像这样,因为括号中的一个元素只是解析为括号,并且您需要逗号来制作一个项目元组。

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

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()
)

相关内容

  • 没有找到相关文章

最新更新