Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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 如何从列表列创建组合的Pyspark数据帧_Python_Apache Spark_Pyspark_Apache Spark Sql_Pyspark Dataframes - Fatal编程技术网

Python 如何从列表列创建组合的Pyspark数据帧

Python 如何从列表列创建组合的Pyspark数据帧,python,apache-spark,pyspark,apache-spark-sql,pyspark-dataframes,Python,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Dataframes,我目前有一个pyspark数据帧,如下所示: +--------------------+ | items| +--------------------+ | [1, 2, 3, 4]| | [1, 5, 7]| | [9, 10]| | ...| 我的目标是转换这个数据帧(或创建一个新的数据帧),以便新数据是表中项目的两个长度组合 我知道,itertools.combinat

我目前有一个pyspark数据帧,如下所示:

+--------------------+
|               items|
+--------------------+
|        [1, 2, 3, 4]|
|           [1, 5, 7]|
|             [9, 10]|
|                 ...|
我的目标是转换这个数据帧(或创建一个新的数据帧),以便新数据是表中项目的两个长度组合

我知道,
itertools.combinations
可以创建列表的组合,但我正在寻找一种方法来高效地对大量数据执行此操作,我不知道如何将其与PySpark集成

示例结果:

+-------------+-------------+
|        item1|        item2|
+-------------+-------------+
|            1|            2|
|            2|            1|
|            1|            3|
|            3|            1|
|            1|            4|
|            4|            1|
|            2|            3|
|            3|            2|
|            2|            4|
|            4|            2|
|            3|            4|
|            4|            3|
|            1|            5|
|            5|            1|
|            1|            7|
|            7|            1|
|            5|            7|
|            7|            5|
|            9|           10|
|           10|            9|
|                        ...|

您可以将
itertools.组合
与自定义项一起使用:

import itertools
from pyspark.sql import functions as F

combinations_udf = F.udf(
    lambda x: list(itertools.combinations(x, 2)),
    "array<struct<item1:int,item2:int>>"
)

df1 = df.withColumn("items", F.explode(combinations_udf(F.col("items")))) \
    .selectExpr("items.*")

df1.show()

#+-----+-----+
#|item1|item2|
#+-----+-----+
#|1    |2    |
#|1    |3    |
#|1    |4    |
#|2    |3    |
#|2    |4    |
#|3    |4    |
#|1    |5    |
#|1    |7    |
#|5    |7    |
#|9    |10   |
#+-----+-----+
导入itertools
从pyspark.sql导入函数为F
组合_udf=F.udf(
lambda x:list(itertools.组合(x,2)),
“数组”
)
df1=df.withColumn(“项目”),F.explode(组合_-udf(F.col(“项目”))\
.selectExpr(“项目。*”)
df1.show()
#+-----+-----+
#|项目1 |项目2|
#+-----+-----+
#|1    |2    |
#|1    |3    |
#|1    |4    |
#|2    |3    |
#|2    |4    |
#|3    |4    |
#|1    |5    |
#|1    |7    |
#|5    |7    |
#|9    |10   |
#+-----+-----+