如何将 [ ] 格式的列表转换为 ( ) 格式
How to convert a list in [ ] format to ( ) format
我有一个包含几亿条记录的大型数据框。我只想要 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) 格式。谢谢
需要这样,因为括号中的一个元素只是被解析为括号,并且您需要逗号来构成一个单项元组。
您可以通过自定义字符串化方法解决此问题:
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()
)
我有一个包含几亿条记录的大型数据框。我只想要 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) 格式。谢谢
需要这样,因为括号中的一个元素只是被解析为括号,并且您需要逗号来构成一个单项元组。
您可以通过自定义字符串化方法解决此问题:
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()
)