Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将[]格式的列表转换为()格式_Python_Pyspark_Pyspark Sql - Fatal编程技术网

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

Python 如何将[]格式的列表转换为()格式,python,pyspark,pyspark-sql,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.parq

我有一个包含数亿条记录的大型数据框。我只想要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()
)

谢谢。你的方法有效。谢谢你的帮助。