簡體   English   中英

使用折疊連接所有數據框列,並通過Spark / Scala減少

[英]Concat of all data frame columns using fold, reduce with Spark / Scala

以下內容可用於動態列生成:

import org.apache.spark.sql.functions._
import sqlContext.implicits._
import org.apache.spark.sql.DataFrame

val input = sc.parallelize(Seq(
   ("a", "5a", "7w", "9", "a12", "a13") 
   )).toDF("ID", "var1", "var2", "var3", "var4", "var5")

val columns_to_concat = input.columns
input.select(concat(columns_to_concat.map(c => col(c)): _*).as("concat_column")).show(false)

返回:

+-------------+
|concat_column|
+-------------+
|a5a7w9a12a13 |
+-------------+

在保留動態列生成的同時如何使用foldLeft,reduceLeft做到這一點?

我總是得到一個錯誤,或者返回一個空值。 盡管concat足夠了,但我對折疊等如何起作用感到好奇。

絕對不是可行的方法 *,但是如果您將其視為編程練習,請執行以下操作:

import org.apache.spark.sql.functions.{col, concat, lit}

columns_to_concat.map(col(_)).reduce(concat(_, _))

要么

columns_to_concat.map(col(_)).foldLeft(lit(""))(concat(_, _))

*因為

  • 對於高級API已經提供的某些解決方案,這是一個復雜的解決方案。
  • 因為它需要計划者/優化器進行額外的工作才能使遞歸表達式變平,所以更不用說該表達式不使用尾調用遞歸並且可以簡單地溢出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM