使用pyspark数据帧中的循环动态生成多列

时间:2019-05-15 14:11:18

标签: apache-spark pyspark apache-spark-sql pyspark-sql

我有一个要求,我必须在pyspark中动态生成多个列。我编写了如下类似的代码来完成相同的任务。

sc = SparkContext()                                                          
sqlContext = SQLContext(sc)
cols = ['a','b','c']    

df = sqlContext.read.option("header","true").option("delimiter", "|").csv("C:\\Users\\elkxsnk\\Desktop\\sample.csv")

for i in cols:
    df1 = df.withColumn(i,lit('hi'))
df1.show()

但是,我在最终结果中缺少a和b列。请帮忙。

更改了如下代码。现在可以正常工作了,但想知道是否有更好的处理方法。

cols = ['a','b','c']
cols_add = []
flg_first = 'Y'
df = sqlContext.read.option("header","true").option("delimiter", "|").csv("C:\\Users\\elkxsnk\\Desktop\\sample.csv")
for i in cols:
    print('start'+str(df.columns))
    if flg_first == 'Y':
        df1 = df.withColumn(i,lit('hi'))
        cols_add.append(i)
        flg_first = 'N'
    else:enter code here
        df1 = df1.select(df.columns+cols_add).withColumn(i,lit('hi'))
        cols_add.append(i)
    print('end' + str(df1.columns))

df1.show()

0 个答案:

没有答案