如何将此代码转换为for循环格式?

时间:2019-06-09 10:22:08

标签: python python-3.x pyspark

我想更改此代码以使用“ for”循环:

df = spark.createDataFrame([(0,prosecced_text[0]),  (1,prosecced_text[1]),.. ,(100,prosecced_text[100]) ], ["id", "items"])

100是prosecced_text列表的长度。

3 个答案:

答案 0 :(得分:1)

通常,我建议您使用列表推导来创建所需的列表,但是所需的特定元组列表正是enumerate生成的(但我们必须使用{{1 }},从中显式构造一个enumerate以获得实际列表):

list

df = spark.createDataFrame(list(enumerate(prosecced_text)), ["id", "items"]) 的作用是返回一个迭代器,该迭代器生成enumerate个元组,其中(index,value)默认从index开始,而0是迭代对象的每个对应元素传递给value

根据@pault现在已删除的注释,特定方法spark.createDataFrame接受任何类型的iterable作为其第一个参数,因此您甚至不需要对enumerate进行封闭调用在上述特定情况下。如果您直接通过list,它将起作用。

答案 1 :(得分:0)

您可以结合使用for in + id增量

from pyspark.ml.fpm import FPGrowth

temp = []
id = 0

for item in prosecced_text:
    temp.append((id, item))
    id += 1

df = spark.createDataFrame(temp, ["id", "items"])
fpGrowth = FPGrowth(itemsCol="items", minSupport=0.5, minConfidence=0.6)
model = fpGrowth.fit(df)

答案 2 :(得分:0)

from pyspark.ml.fpm import FPGrowth
# create empty list buffer_list
buffer_list = []
for x in range(101):
    buffer_list.append((x,prosecced_text[x]))


df = spark.createDataFrame(buffer_list, ["id", "items"])
fpGrowth = FPGrowth(itemsCol="items", minSupport=0.5, minConfidence=0.6)
model = fpGrowth.fit(df)