通过执行数据库提取操作动态生成Spark Column

时间:2019-03-17 13:01:47

标签: java apache-spark

我有一个2列的spark数据框。

我想在spark数据帧上生成第三列。

第3列必须使用前2列从DB获取的值填充。

public static string encryptText(string text, int keysize, string publickeyxml)
{
  var data = algorithm(Encoding.UTF8.GetBytes(text), keysize, publicKeyxml);
  return Convert.ToBase64String(data);
}


public static byte[] algorithm(byte[] text, int keysize, string publickeyxml)
{
  using (var provider = new RSACryptoServiceProvider(keysize))
  {
  provider.FromXmlString(publickeyxml);
  return provider.Encrypt(text, OAEP);
  }
}

string plaintext = "abcdefghijklmnopqrstuvwxyz";
ciphertext =  encryptText(plaintext, keysize, publickey);

string ciphertext;
string publickey = "mypublickey"

我不知道如何在函数data = data.withColumn("z", getValueOfZ(col("x"),col("y"))); 中使用x和y填充y的值。 getValueOfZ()需要基于x和y的值执行选择查询,并返回Z的值。

1 个答案:

答案 0 :(得分:0)

我不知道getValueOfY()应该做什么。 Spark有3种选择。

简单操作

如果这是一个简单的操作,则可以使用expr()。例如,如果结果是x和y的和,则可以使用:

df = df.withColumn("y", expr("x + y")));

您可以通过以下方式使用expr()

import static org.apache.spark.sql.functions.expr;

内置函数

Spark提供了很多这些功能。他们的Javadoc is available here

自定义UDF转换

如果您的代码更复杂且无法通过表达式或函数处理,则可以调用UDF(用户定义函数)。

我希望这会有所帮助,不要犹豫发表评论以提出更多问题。