根据条件和值列表创建pyspark数据框

时间:2019-04-25 11:05:37

标签: python pyspark

我在变量中有一个值-ID1,并且有十个值的列表说

LIST1 = [1,2,3,4,5,6,7,8,9,10]

现在我想创建一个pyspark数据框,如下所示:

ID  LIST
1   1
1   2
1   3
1   4
1   5
1   6
1   7
1   8
1   9
1   10

注意:List1的长度是动态的,根据其长度,我们需要相应地添加行。

1 个答案:

答案 0 :(得分:0)

这取决于ID是否为常数,或者您甚至拥有ID为2的List2,然后希望将两者合并为一个DataFrame。

就常量而言,有两种选择:

ID = 1
LIST1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

source = list(map(lambda x: (ID, x), LIST1))
# source: [(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (1, 10)]

df = spark.createDataFrame(source, ['ID', 'LIST'])
df.show()
# +---+----+                                                                      
# | ID|LIST|
# +---+----+
# |  1|   1|
# |  1|   2|
# |  1|   3|
# |  1|   4|
# |  1|   5|
# |  1|   6|
# |  1|   7|
# |  1|   8|
# |  1|   9|
# |  1|  10|
# +---+----+

from pyspark.sql.functions import lit

ID = 1
LIST1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

source = list(map(lambda x: (x,), LIST1))
# createDataFrame needs iter of iters -> list/tuple of lists/tuples
df = spark.createDataFrame(source, ['LIST'])
df.withColumn('ID', lit(ID)).show()
+----+---+
|LIST| ID|
+----+---+
|   1|  1|
|   2|  1|
|   3|  1|
|   4|  1|
|   5|  1|
|   6|  1|
|   7|  1|
|   8|  1|
|   9|  1|
|  10|  1|
+----+---+