Spark-Doris-Connecter By pySpark

本文档展示了如何配置Spark-Doris-Connector环境,并通过pyspark从Doris数据库中读取数据。首先,按照指定链接的步骤设置环境,然后使用`spark.read.format()`方法指定数据源为Doris,设置相关连接参数如表名、节点地址、用户名和密码,最后加载数据并展示前5行记录。
  1. 准备Spark-Doris-Connecter环境,具体参照:
https://blog.youkuaiyun.com/wangleigiser/article/details/124724390?spm=1001.2014.3001.5501
  1. 输入如下命令进入pyspark
[root@xxx ~]# pyspark
Python 3.6.9 (default, Dec  8 2021, 21:08:43) 
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
22/05/12 10:29:25 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
22/05/12 10:29:26 WARN Utils: Service 'SparkUI' could not bind on port 4040. Attempting port 4041.
Welcome to
      ____           
### Spark-Doris-Connection 数据导入时 Doris 自增 ID 唯一键 表结构 数据质量保证机制 在使用 Spark-Doris-Connection 导入数据时,如果 Doris 表以自增 ID 作为唯一键,并且 Spark 插入数据时未提供该字段,则需要确保数据质量的机制主要依赖于 Doris 的表设计和 Spark 的写入逻辑。以下是相关的详细说明: #### 1. Doris 自增 ID 的工作机制 Doris 支持定义自增主键(Auto Increment Primary Key),当插入数据时未提供该字段值时,Doris 会自动为每条记录生成唯一的递增值。此功能通常用于避免手动管理主键值的复杂性[^1]。 然而,Doris 的自增 ID 功能仅适用于特定场景,例如 Unique 模型表或 Aggregation 模型表中的某些字段。如果表结构不支持自增 ID 或者数据写入过程中出现冲突,则可能导致数据质量问题。 #### 2. Spark 写入 Doris 的行为 Spark-Doris-Connection 提供了多种写入模式,包括 `APPEND` 和 `UPDATES` 等。在 `APPEND` 模式下,Spark 将数据追加到 Doris 表中,而无需更新现有记录。在这种情况下,如果 Doris 表包含自增主键,但 Spark 写入的数据未提供该字段,则 Doris 会自动为新记录生成主键值[^2]。 需要注意的是,如果 Spark 写入的数据中存在重复的非主键字段组合(如唯一约束字段),可能会导致写入失败或部分数据丢失。因此,必须确保数据源的唯一性或通过 Doris 的去重机制处理潜在冲突。 #### 3. 数据质量保证机制 为了保证数据质量,可以采取以下措施: - **数据预处理**:在 Spark 中对数据进行清洗和去重,确保写入 Doris 的数据符合目标表的约束条件。例如,可以通过 Spark SQL 或 DataFrame API 对数据进行过滤、转换和聚合。 ```python from pyspark.sql import SparkSession spark = SparkSession.builder.appName("DataCleaning").getOrCreate() # 加载数据 df = spark.read.format("iceberg").load("hdfs://path/to/iceberg/table") # 数据清洗与去重 cleaned_df = df.dropDuplicates(["unique_key_column"]) # 写入 Doris cleaned_df.write \ .format("doris") \ .option("doris.table.identifier", "db_name.table_name") \ .option("doris.fenodes", "127.0.0.1:8041") \ .option("user", "root") \ .option("password", "") \ .mode("append") \ .save() ``` - **Doris 表结构优化**:设计合理的表结构,确保唯一键字段能够有效区分每条记录。如果表中包含多个唯一约束字段,则需要确保这些字段的组合值具有唯一性。 - **错误处理与重试机制**:配置 Spark-Doris-Connection 的最大重试次数参数(如 `maxRetries`),以应对网络波动或其他临时性问题。同时,启用日志记录功能,捕获写入失败的具体原因并进行修复。 - **数据校验**:在数据写入完成后,通过查询 Doris 表验证数据完整性。例如,检查写入记录数是否与预期一致,或者是否存在重复或缺失的记录。 #### 4. 典型问题及解决方法 - **字段长度超出限制**:如果 Spark DataFrame 中的字段长度超过 Doris 表定义的长度,将导致写入失败。需调整 Doris 表结构或对数据进行截断处理[^1]。 - **连接拒绝错误**:如果遇到 `Connection refused` 错误,可能是由于 Doris FE 的监听地址配置错误或防火墙规则限制。需检查 Doris 配置文件中的 `http_port` 参数,并确保网络连通性[^2]。 - **部分数据写入成功**:当部分数据写入成功时,可能是因为批量写入过程中某些记录违反了表约束。建议启用事务支持或分批次写入数据,以减少冲突概率。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值