Scala Spark Rdd按字段名处理每行的不同字段
我不熟悉Spark和Scala,现在我不知怎么地遇到了一个问题:如何按字段名处理每行的不同字段,然后放入一个新的Scala Spark Rdd按字段名处理每行的不同字段,scala,apache-spark,Scala,Apache Spark,我不熟悉Spark和Scala,现在我不知怎么地遇到了一个问题:如何按字段名处理每行的不同字段,然后放入一个新的rdd 这是我的伪代码: val newRdd = df.rdd.map(x=>{ def Random1 => random(1,10000) //pseudo def Random2 => random(10000,20000) //pseduo x.schema.map(y=> { i
rdd
这是我的伪代码:
val newRdd = df.rdd.map(x=>{
def Random1 => random(1,10000) //pseudo
def Random2 => random(10000,20000) //pseduo
x.schema.map(y=> {
if (y.name == "XXX1")
x.getAs[y.dataType](y.name)) = Random1
else if (y.name == "XXX2")
x.getAs[y.dataType](y.name)) = Random2
else
x.getAs[y.dataType](y.name)) //pseduo,keeper the same
})
})
上面的错误减少了2个:
rdd
谢谢Ramesh Maharjan,现在可以用了
def randomString(len: Int): String = {
val rand = new scala.util.Random(System.nanoTime)
val sb = new StringBuilder(len)
val ab = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
for (i <- 0 until len) {
sb.append(ab(rand.nextInt(ab.length)))
}
sb.toString
}
def testUdf = udf((value: String) =>randomString(2))
val df = sqlContext.createDataFrame(Seq((1,"Android"), (2, "iPhone")))
df.withColumn("_2", testUdf(df("_2")))
+---+---+
| _1| _2|
+---+---+
| 1| F3|
| 2| Ag|
+---+---+
def randomString(len:Int):字符串={
val rand=new scala.util.Random(System.nanoTime)
val sb=新的StringBuilder(len)
val ab=“0123456789abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz”
对于(i)(字符串(2))
val df=sqlContext.createDataFrame(Seq((1,“Android”),(2,“iPhone”))
df.带列(“_2”,testUdf(df(“_2”))
+---+---+
| _1| _2|
+---+---+
|1 | F3|
|2 | Ag|
+---+---+
如果您打算过滤某些字段“XXX1”或“XXX2”,则简单的选择
函数应该可以实现这一功能
df.select("XXX1", "XXX2")
并将其转换为rdd
如果您打算做其他事情,那么您的
x.getAs
应该如下所示
val random1 = x.getAs(y.name)
似乎您正在尝试更改某些列“XXX1”和“XXX2”中的值为此,一个简单的
udf
函数和withColumn
应该可以实现这个功能简单的
udf
功能如下
def testUdf = udf((value: String) => {
//do your logics here and what you return from here would be reflected in the value you passed from the column
})
您可以将udf函数调用为
df.withColumn("XXX1", testUdf(df("XXX1")))
同样地,您也可以为“XXX2”做些什么谢谢您的快速回复,但我想得到一个新的RDD,它改变了特殊的奇数RDD字段,而其他字段保持不变。是的,我也认为“udf”。但在我的情况下,每个特殊字段都是不同的。withColumn将为一个特殊字段提供相同的结果。
withColumn
将给出所使用的udf函数
返回的结果。因此,您可以为udf
中的不同字段匹配案例
,以获得不同的值。@Tamesh Maharjan-抱歉稍后,它会很好地工作,非常感谢。我的荣幸@meng。顺便说一下,你把我的名字弄错了。:)如果答案对你有用的话,投票也会对我有帮助:)