字符串置换spark udf
String permutation spark udf
我正在使用 scala 将猪脚本转换为 spark 1.6,我有一个包含字符串的数据框,我想按特定顺序交换字符。
示例:
+----------------+
| Info|
+----------------+
|8106f510000dc502|
+----------------+
我想这样转换 [3,1,5,7,6,(8-16),4,2]
+----------------+
| Info|
+----------------+
|08f150000dc50241|
+----------------+
这是我的带有 java 的猪 UDF,它正在运行:
public class NormalizeLocInfo extends EvalFunc<String>
{
public String exec(Tuple input) throws IOException {
if (input == null || input.size() == 0)
return null;
try{
char [] ca = ((String)input.get(0)).toCharArray();
return (
new StringBuilder().append(ca[3]).append(ca[0]).append(ca[5]).append(ca[7]).append(ca[6]).append(ca[8]).append(ca[9]).append(ca[10])
.append(ca[11]).append(ca[12]).append(ca[13]).append(ca[14]).append(ca[15]).append(ca[16]).append(ca[4]).toString().toUpperCase()
);
}catch(Exception e){throw new IOException("UDF:Caught exception processing input row :"+input.get(0), e);}
}
}
如何使用 scala 将其更改为 spark udf?
谢谢你
这就是你如何在 spark 中为你的函数定义一个 UDF 函数
import org.apache.spark.sql.functions._
val exec = udf((input : String) => {
if (input == null || input.trim == "") ""
else {
Try{
val ca = input.toCharArray
List(3,1,5,7,6,9,10,11,12,13,14,15,16,4,2).map(a=>ca(a-1)).mkString
} match{
case Success(data) => data
case Failure(e) =>
println(e.printStackTrace())
""
}
}
})
您可以将函数与 withColumn() 一起使用
val dfNew = df.withColumn("newCol", exec($"oldCol"))
希望对您有所帮助
我正在使用 scala 将猪脚本转换为 spark 1.6,我有一个包含字符串的数据框,我想按特定顺序交换字符。
示例:
+----------------+
| Info|
+----------------+
|8106f510000dc502|
+----------------+
我想这样转换 [3,1,5,7,6,(8-16),4,2]
+----------------+
| Info|
+----------------+
|08f150000dc50241|
+----------------+
这是我的带有 java 的猪 UDF,它正在运行:
public class NormalizeLocInfo extends EvalFunc<String>
{
public String exec(Tuple input) throws IOException {
if (input == null || input.size() == 0)
return null;
try{
char [] ca = ((String)input.get(0)).toCharArray();
return (
new StringBuilder().append(ca[3]).append(ca[0]).append(ca[5]).append(ca[7]).append(ca[6]).append(ca[8]).append(ca[9]).append(ca[10])
.append(ca[11]).append(ca[12]).append(ca[13]).append(ca[14]).append(ca[15]).append(ca[16]).append(ca[4]).toString().toUpperCase()
);
}catch(Exception e){throw new IOException("UDF:Caught exception processing input row :"+input.get(0), e);}
}
}
如何使用 scala 将其更改为 spark udf? 谢谢你
这就是你如何在 spark 中为你的函数定义一个 UDF 函数
import org.apache.spark.sql.functions._
val exec = udf((input : String) => {
if (input == null || input.trim == "") ""
else {
Try{
val ca = input.toCharArray
List(3,1,5,7,6,9,10,11,12,13,14,15,16,4,2).map(a=>ca(a-1)).mkString
} match{
case Success(data) => data
case Failure(e) =>
println(e.printStackTrace())
""
}
}
})
您可以将函数与 withColumn() 一起使用
val dfNew = df.withColumn("newCol", exec($"oldCol"))
希望对您有所帮助