我正在尝试更新一个大 mysql 表的每一行的几个字段(接近500
百万行)。该表没有任何主键(或具有字符串主键,如 UUID)。我没有足够的执行程序内存来一次读取和保存整个数据。任何人都可以让我知道我处理此类表格的选项是什么。
下面是架构
CREATE TABLE Persons ( Personid varchar(255) NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255) DEFAULT NULL, Email varchar(255) DEFAULT NULL, Age int(11) DEFAULT NULL) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Spark代码就像
SparkSession spark = SparkSession.builder().master("spark://localhost:7077").appName("KMASK").getOrCreate();
DataFrame rawDataFrame = spark.read().format("jdbc").load();
rawDataFrame.createOrReplaceTempView("data");
//encrypt is UDF
String sql = "select Personid, LastName, FirstName, encrypt(Email), Age from data";
Dataset newData = spark.sql(sql);
newData.write().mode(SaveMode.Overwrite).format("jdbc").options(options).save();
这张表有大约150
百万条记录,数据大小约为6GB
. 我的执行者记忆只是2 gb
. 我可以使用 Spark - jdbc 处理此表吗?