2015-07-10 3 views

Odpowiedz

17

Jednym ze sposobów osiągnięcia tego jest użycie withColumn metody:

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) 

Alternatywnie można użyć SQL na zarejestrowanej tabeli:

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

Hej @ zero323, co jeśli chcę utworzyć kolumnę, np. Col_1 jest łańcuchem, a col_2 jest łańcuchem znaków i chcę column_n jako dołącz do col_1 i Col_2. tj. Col_1 ma wartość zero, a column_2 ma wartość 323. Column_n powinno wynosić zero323? – Jason

+0

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

+0

Dzięki @ zero323. Chociaż mam to pytanie: df.select (concat (col ("k"), świeci (""), col ("v"))) Jak mogę utworzyć tutaj trzecią kolumnę? – Jason

3

Dodatkowo, możemy użyć 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()