我有一个带有五列的SparkDataFrame
df
。我想添加另一列,其值是第一列和第二列的元组。当与with Col列()方法一起使用时,我得到不匹配错误,因为输入不是列类型,而是(列,列)。我想知道在这种情况下,除了在行上运行循环之外是否有解决方案?
var dfCol=(col1:Column,col2:Column)=>(col1,col2)
val vv = df.withColumn( "NewColumn", dfCol( df(df.schema.fieldNames(1)) , df(df.schema.fieldNames(2)) ) )
您可以使用数组将多个数据帧列合并为一个。
// $"*" will capture all existing columns
df.select($"*", array($"col1", $"col2").as("newCol"))
您可以使用用户定义函数 udf
来实现所需的目标。
object TupleUDFs {
import org.apache.spark.sql.functions.udf
// type tag is required, as we have a generic udf
import scala.reflect.runtime.universe.{TypeTag, typeTag}
def toTuple2[S: TypeTag, T: TypeTag] =
udf[(S, T), S, T]((x: S, y: T) => (x, y))
}
df.withColumn(
"tuple_col", TupleUDFs.toTuple2[Int, Int].apply(df("a"), df("b"))
)
假设“a”和“b”是要放入元组的< code>Int类型的列。
您可以使用struct
函数来创建提供的列的元组:
import org.apache.spark.sql.functions.struct
val df = Seq((1,2), (3,4), (5,3)).toDF("a", "b")
df.withColumn("NewColumn", struct(df("a"), df("b")).show(false)
+---+---+---------+
|a |b |NewColumn|
+---+---+---------+
|1 |2 |[1,2] |
|3 |4 |[3,4] |
|5 |3 |[5,3] |
+---+---+---------+
我有两个数据帧,我需要连接一列,如果id包含在第二个数据帧的同一列中,则只从第一个数据帧中获取行: df1: 断续器: 期望输出: 我已经用df1.join(df2("id ")," left ")试过了,但是给我错误:“Dataframe”对象是不可调用的。
我有以下两个Spark数据帧: 任何PySpark、SQL和HiveContext都可以提供帮助。
我试着在谷歌上搜索,但无法找到解决方案。合并两个< code >数组 投入- 预期产出- 谁能解释一下如何使用Java在Spark中实现这一点?
我有一个数据帧: 现在我想把它转换成一个新的数据帧,比如 我怎样才能用熊猫做到这一点?
这是我的密码: 我想知道如何将df3绑定到单个数据帧中作为"NA"s? 我在r_blogger上找到了一篇关于将向量或长度不等的数据帧组合成一个数据帧的文章。http://www.r-bloggers.com/r-combining-vectors-or-data-frames-of-unequal-length-into-one-data-frame/ 但是我从数据中得到的数据框,其中一些是空的
问题内容: 我有 我想要 问题答案: