scala – 使用withColumn将两列添加到现有DataFrame
发布时间:2020-12-16 09:29:09 所属栏目:安全 来源:网络整理
导读:我有一个包含很少列的DataFrame.现在我想再向现有的DataFrame添加两列. 目前我正在使用DataFrame中的withColumn方法执行此操作. 例如: df.withColumn("newColumn1",udf(col("somecolumn"))) .withColumn("newColumn2",udf(col("somecolumn"))) 实际上我可以
我有一个包含很少列的DataFrame.现在我想再向现有的DataFrame添加两列.
目前我正在使用DataFrame中的withColumn方法执行此操作. 例如: df.withColumn("newColumn1",udf(col("somecolumn"))) .withColumn("newColumn2",udf(col("somecolumn"))) 实际上我可以使用Array [String]在单个UDF方法中返回两个新的COlumn值.但目前我正是这样做的. 无论如何,我能有效地做到这一点吗?使用爆炸是不错的选择? 即使我必须使用explode,我必须使用withColumn一次,然后将列值返回为Array [String],然后使用explode,再创建两列. 哪一个有效?还是有其他选择吗? 解决方法
您需要两次调用AFAIk(每个新列一次).但是如果你的udf计算量很大,你可以避免在将“复杂”结果存储到临时列中然后“解压缩”结果时将其调用两次.使用column的apply方法(可以访问数组元素):
val myUDf = udf((s:String) => Array(s.toUpperCase(),s.toLowerCase())) val df = sc.parallelize(Seq("Peter","John")).toDF("name") val newDf = df .withColumn("udfResult",myUDf(col("name"))) .withColumn("uppercaseColumn",col("udfResult")(0)) .withColumn("lowercaseColumn",col("udfResult")(1)) .drop("udfResult") newDf.show() 给 +-----+---------------+---------------+ | name|uppercaseColumn|lowercaseColumn| +-----+---------------+---------------+ |Peter| PETER| peter| | John| JOHN| john| +-----+---------------+---------------+ 我经常这样做,但不使用数组,而是使用案例类或元组作为udf的结果 编辑: 使用UDF返回元组,解压缩将如下所示: val newDf = df .withColumn("udfResult",myUDf(col("name"))) .withColumn("lowercaseColumn",col("udfResult._1")) .withColumn("uppercaseColumn",col("udfResult._2")) .drop("udfResult") (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |