在Apache Spark DataFrame中連接列
在Spark應用中,處理結構化資料經常需要將多列組合成一個整體。一個常見的任務是連接兩列或多列以產生新的組合列。 Spark SQL提供了便捷的機制來無縫地實現這一點。
方法一:使用原始SQL中的CONCAT函數
對於使用原始SQL查詢的用戶,CONCAT函數可以派上用場。它允許你將多列的字串組合成單一字串。
Python:
<code class="language-python">df = sqlContext.createDataFrame([("foo", 1), ("bar", 2)], ("k", "v")) df.registerTempTable("df") sqlContext.sql("SELECT CONCAT(k, ' ', v) FROM df")</code>
Scala:
<code class="language-scala">import sqlContext.implicits._ val df = sc.parallelize(Seq(("foo", 1), ("bar", 2))).toDF("k", "v") df.registerTempTable("df") sqlContext.sql("SELECT CONCAT(k, ' ', v) FROM df")</code>
方法二:利用DataFrame API的concat函數
從Spark 1.5.0開始,DataFrame API引入了concat函數,提供了一種優雅的方式在API中連接列。
Python:
<code class="language-python">from pyspark.sql.functions import concat, col, lit df.select(concat(col("k"), lit(" "), col("v")))</code>
Scala:
<code class="language-scala">import org.apache.spark.sql.functions.{concat, lit} df.select(concat($"k", lit(" "), $"v"))</code>
方法三:使用concat_ws函數自訂分隔符號
Spark也提供concat_ws函數,讓你指定連接字串之間的自訂分隔符號。
範例:
<code class="language-python"># 创建一个包含多个列的DataFrame df = spark.createDataFrame([ ("John", "Doe", "John Doe"), ("Jane", "Smith", "Jane Smith") ], ["first_name", "last_name", "full_name"]) # 使用自定义分隔符连接名字和姓氏 df = df.withColumn("full_name_with_comma", concat_ws(",", df.first_name, df.last_name))</code>
以上是如何連接 Apache Spark DataFrame 中的欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!