简体   繁体   English

使用动态列数更改数据框行值

[英]change a dataframe row value with dynamic number of columns spark scala

I have a dataframe (contains 10 columns) for which I want to change the value of a row (for the last column only). 我有一个数据框(包含10列),我想为其更改行的值(仅适用于最后一列)。 I have written following code for this: 我为此编写了以下代码:

 val newDF = spark.sqlContext.createDataFrame(WRADF.rdd.map(r=> {
      Row(r.get(0), r.get(1),
          r.get(2), r.get(3),
          r.get(4), r.get(5),
          r.get(6), r.get(7),
          r.get(8), decrementCounter(r))
     }), WRADF.schema) 

I want to change the value of a row for 10th column only (for which I wrote decrementCounter() function). 我只想更改第10列的行的值(为此我写了decrementCounter()函数)。 But the above code only runs for dataframes with 10 columns. 但是上面的代码仅适用于具有10列的数据帧。 I don't know how to convert this code so that it can run for different dataframe (with different number of columns). 我不知道如何转换此代码,以便它可以针对不同的数据帧(具有不同的列数)运行。 Any help will be appreciated. 任何帮助将不胜感激。

Don't do something like this. 不要做这样的事情。 Define udf 定义udf

import org.apache.spark.sql.functions.udf._

val decrementCounter = udf((x: T) => ...) // adjust types and content to your requirements

df.withColumn("someName", decrementCounter($"someColumn"))

I think UDF will be a better choice because it can be applied using the Column name itself. 我认为UDF将是一个更好的选择,因为它可以使用列名本身来应用。

For more on udf you can take a look here : https://docs.databricks.com/spark/latest/spark-sql/udf-scala.html 有关udf的更多信息,可以在这里查看: https : //docs.databricks.com/spark/latest/spark-sql/udf-scala.html

For your code just use this : 对于您的代码,只需使用以下代码:

import org.apache.spark.sql.functions.udf._

val decrementCounterUDF = udf(decrementCounter _) 

df.withColumn("columnName", decrementCounterUDF($"columnName"))

What it will does is apply this decrementCounter function on each and every value of column columnName . 它将做的是将此decrementCounter函数应用于列columnName每个值。

I hope this helps, cheers ! 希望这对您有所帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在 Spark DataFrame 中使用多列更改行的值 - Change value of a row using multiple columns in Spark DataFrame 根据Spark / Scala中的动态值过滤数据帧 - Filtering dataframe based on dynamic value in Spark/Scala spark scala:用数千列逐行更新巨大的 dataframe - spark scala: update huge dataframe with thousands of columns row-by-row Scala Spark DataFrame 问题:如何通过将当前行中的值与前一行中的某处匹配来添加新列 - Scala Spark DataFrame Question:How to add new columns by matching the value in current row to somewhere from previous rows Spark Scala JOIN 后所有类似 dataframe 列的动态比较 - Spark Scala dynamic comparing of all similar dataframe columns after JOIN 当列未知时,按特定值过滤 Spark Scala Dataframe 中的列 - Filter columns in a Spark Scala Dataframe by a specific value when the columns are unknown 如何根据 scala/spark 中的案例 class 更改 dataframe 中列的数据类型 - How to change datatype of columns in a dataframe based on a case class in scala/spark Scala spark - 使用累加器计算数据帧列中的空值 - Scala spark - count null value in dataframe columns using accumulator 在 Spark Scala 中选择 Dataframe 的列 - Selecting columns of Dataframe in Spark Scala 数据帧中的列作为键,列数据作为值按Spark Scala中的id分组 - dataframe columns as key and column data as value group by id in spark scala
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM