2016-05-17 4 views
3

私は1つだけ使用してwithColumn()を考えることができますか?私のデータフレームの例えばSpark APIのデータフレームRDDに新しい列を追加する方法はいくつありますか?</p> <pre><code>val df = sc.dataFrame.withColumn('newcolname',{ lambda row: row + 1 }) </code></pre> <p>を私はこれは、データをテキストにする方法を一般化します:

strning値は、「これは文字列の例である」と言うと私はarraystringヴァルのよう

最初と最後の単語を抽出したいと考えていました:配列[文字列] =配列(最初に、最後の)

答えて

2

これは、あなたが探しているものですか?

val sc: SparkContext = ... 
val sqlContext = new SQLContext(sc) 

import sqlContext.implicits._ 

val extractFirstWord = udf((sentence: String) => sentence.split(" ").head) 
val extractLastWord = udf((sentence: String) => sentence.split(" ").reverse.head) 

val sentences = sc.parallelize(Seq("This is an example", "And this is another one", "One_word", "")).toDF("sentence") 
val splits = sentences 
      .withColumn("first_word", extractFirstWord(col("sentence"))) 
      .withColumn("last_word", extractLastWord(col("sentence"))) 

splits.show() 

次に出力される。

+--------------------+----------+---------+ 
|   sentence|first_word|last_word| 
+--------------------+----------+---------+ 
| This is an example|  This| example| 
|And this is anoth...|  And|  one| 
|   One_word| One_word| One_word| 
|     |   |   | 
+--------------------+----------+---------+ 
1
# Create a simple DataFrame, stored into a partition directory 
df1 = sqlContext.createDataFrame(sc.parallelize(range(1, 6))\ 
            .map(lambda i: Row(single=i, double=i * 2))) 
df1.save("data/test_table/key=1", "parquet") 

# Create another DataFrame in a new partition directory, 
# adding a new column and dropping an existing column 
df2 = sqlContext.createDataFrame(sc.parallelize(range(6, 11)) 
            .map(lambda i: Row(single=i, triple=i * 3))) 
df2.save("data/test_table/key=2", "parquet") 

# Read the partitioned table 
df3 = sqlContext.parquetFile("data/test_table") 
df3.printSchema() 

https://spark.apache.org/docs/1.3.1/sql-programming-guide.html

関連する問題