2015-07-10 16 views

risposta

17

Un modo per raggiungere questo obiettivo è quello di utilizzare withColumn metodo:

old_df = sqlContext.createDataFrame(sc.parallelize(
    [(0, 1), (1, 3), (2, 5)]), ('col_1', 'col_2')) 

new_df = old_df.withColumn('col_n', old_df.col_1 - old_df.col_2) 

In alternativa è possibile utilizzare SQL su una tabella registrata:

old_df.registerTempTable('old_df') 
new_df = sqlContext.sql('SELECT *, col_1 - col_2 AS col_n FROM old_df') 
+0

Ehi @ zero323, che cosa succede se voglio creare una colonna cioè Col_1 è una stringa e col_2 è una stringa e voglio column_n come join di col_1 e Col_2. Ad esempio, Col_1 è zero e column_2 è 323. Column_n deve essere zero323? – Jason

+0

@ Jason http://stackoverflow.com/a/31452109/1560062 – zero323

+0

Grazie a @ zero323. Anche se ho questa domanda: df.select (concat (col ("k"), illuminato (" "), col (" v"))) Come posso creare una terza colonna qui? – Jason

3

Inoltre, possiamo utilizzare UDF

from pyspark.sql.functions import udf,col 
from pyspark.sql.types import IntegerType 
from pyspark import SparkContext 
from pyspark.sql import SQLContext 

sc = SparkContext() 
sqlContext = SQLContext(sc) 
old_df = sqlContext.createDataFrame(sc.parallelize(
    [(0, 1), (1, 3), (2, 5)]), ('col_1', 'col_2')) 
function = udf(lambda col1, col2 : col1-col2, IntegerType()) 
new_df = old_df.withColumn('col_n',function(col('col_1'), col('col_2'))) 
new_df.show() 
Problemi correlati