2016-11-08 3 views
0

Я пытаюсь преобразовать несколько столбцов в dataframe из строки плавать, как этотPyspark dataframe конвертировано несколько столбцов плавать

df_temp = sc.parallelize([("1", "2", "3.4555"), ("5.6", "6.7", "7.8")]).toDF(("x", "y", "z")) 
df_temp.select(*(float(col(c)).alias(c) for c in df_temp.columns)).show() 

, но я получаю ошибку

select() argument after * must be a sequence, not generator 

Я не могу понять, почему эта ошибка бросается

ответ

4

Вам нужна функция cast():

df_temp.select(*(col(c).cast("float").alias(c) for c in df_temp.columns)) 
+0

Совершенная. Можете ли вы объяснить, почему я получил ошибку? – MARK

+1

потому что 'float()' не является искровой функцией – mtoto

-1

Вот другой подход о том, как это сделать:

cv = [] # list of columns you want to convert to Float 
cf = [] # list of columns you don't want to change 

l = ['float(x.'+c+')' for c in cv] 
cst = '('+','.join(l)+')' 

l2 = ['x.'+c for c in cf] 
cst2 = '('+','.join(l2)+')' 

df2rdd = df.map(lambda x : eval(cst2)+eval(cst)) 

df_output = sqlContext.createDataFrame(df2rdd,df.columns) 

df_output Ваш требуется dataframe

Смежные вопросы