当前位置: 首页 > 知识库问答 >
问题:

Spark jdbc-read->update->写无主键的大表

赫连心思
2023-03-14
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;
 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();

这个表有大约150100万条记录,数据大小大约6GB。我的执行器内存只有2 GB。我可以使用Spark-JDBC处理这个表吗。

共有1个答案

茹建茗
2023-03-14

理想情况下,您可以更改spark jdbcfetchsize选项,以减少/增加每次提取和处理的记录数量。

对数据进行分区还有助于减少洗牌和额外的开销。因为您有age作为数字字段。您还可以在由时间决定的分区中处理数据。首先,确定最小和最大年龄,并使用Spark JDBC选项。

值得注意的是:

    null
 类似资料:
  • 在MySQL数据库上有一个没有任何主键的表。我想使用hibernate访问Java的数据端。但是,hibernate无法解析映射文档。其他表映射正确。这个问题是不是没有主键的原因?我必须至少创建一个主键来映射此表吗?还是还有别的什么? 表

  • 问题内容: 我正在使用一个返回json的Web服务,并将json存储在本地变量中。json代表一个简单的业务对象,例如: 大小写是这样的,因为按照我们的命名约定,它与.net类的属性名称匹配。 当更改其中一些属性并传递回json时,Web服务现在期望使用驼峰式(再次,按照我们对方法参数的命名约定),而不是最初返回的pascal式。 这当然是行不通的。 我用来将json作为字符串发送回Web服务,并

  • 键被作为每个实体实例主要唯一标识。当使用的是关系数据库时,键被映射为主键这个概念。你还可以将唯一标识配置为非主键(详见 替代键(备用关键字))。 惯例 按照惯例,名为 Id 或者 <当前类型名称>Id 的属性都将被配置为实体的键。 class Car { public string Id { get; set; } public string Make { get; set; }

  • 我刚到Spring 我尝试使用spring rest api和Hibernate更新Mysql中的一个现有值。但它每次都会抛出一个错误。 错误消息:

  • 问题内容: 这是我的mysql表的架构,即时通讯使用mysql 5 需要敏感的UNIQUE KEY大小写, 它应该允许输入类似(’a’,0)&(’A’,0)的值 尝试将排序规则更改为latin_1和latin_generic_ci 问题答案: 最简单的是在DDL语句上添加, SQLFiddle演示

  • 问题内容: 关于create table命令上的重复键,我收到1022错误。看完查询后,我不知道在哪里进行复制。有人可以看到吗? 问题答案: 您很可能已经在名称或数据库中具有约束。如果是这样,只需重命名约束即可。 约束对于整个数据库必须是唯一的,而不仅仅是对要创建/更改的特定表。 要找出约束当前在哪里使用,可以使用以下查询: