pyspark mongodb问题

本文探讨了Hadoop用户在使用PySpark读取MongoDB数据时遇到的问题,详细记录了一个关于数据类型冲突和数据库连接只读模式的错误,并尝试提供了解决方案。
问题1:
root 用户运行pyspark 没问题
hadoop 用户运行就报如下错

df1 = spark.read.format("com.mongodb.spark.sql.DefaultSource").option("collection","devices").load()
17/02/15 19:34:26 WARN MongoInferSchema: Field 'devcaps' contains conflicting types converting to StringType
17/02/15 19:34:27 ERROR PoolWatchThread: Error in trying to obtain a connection. Retrying in 7000ms
java.sql.SQLException: A read-only user or a user in a read-only database is not permitted to disable read-only mode on a connection.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.setReadOnly(Unknown Source)
at com.jolbox.bonecp.ConnectionHandle.setReadOnly(ConnectionHandle.java:1324)


求解
。。。

以hadoop用户 运行spark-submit 就不报错,原因可能是pyspark 的bug
### 如何在 PySpark 中连接 MongoDB 数据库进行数据操作 为了实现 PySparkMongoDB 的集成,需要使用 `mongo-spark-connector` 工具来简化这一过程。通过设置 Spark 配置项指定输入和输出 URI 来定义与 MongoDB 实例之间的连接参数。 启动 PySpark Shell 并加载必要的依赖包: ```bash ./bin/pyspark \ --conf "spark.mongodb.input.uri=mongodb://127.0.0.1/test.myCollection?readPreference=primaryPreferred" \ --conf "spark.mongodb.output.uri=mongodb://127.0.0.1/test.myCollection" \ --packages org.mongodb.spark:mongo-spark-connector_2.11:2.3.0 ``` 上述命令设置了两个重要的配置选项用于读写 MongoDB 文档[^1]。其中 `input.uri` 表示从哪个地址读取文档;而 `output.uri` 则指定了要保存到的目标位置。 一旦成功建立了连接,则可以通过 DataFrame API 对 MongoDB 中的数据执行各种转换和动作。例如,可以从集合中加载数据作为 DataFrame 或者将现有的 DataFrame 存储回 MongoDB: ```python from pyspark.sql import SparkSession # 创建一个新的 Spark Session spark = SparkSession.builder.appName("example").getOrCreate() # 加载来自 MongoDB 的数据至 DataFrame df = spark.read.format("com.mongodb.spark.sql.DefaultSource").load() df.show() # 将本地文件或其他来源的数据存入 MongoDB another_df.write\ .format("com.mongodb.spark.sql.DefaultSource")\ .mode("append")\ .save() ``` 对于可能出现的身份验证错误等问题,在确保网络可达性和权限无误的前提下,还需确认所提供的认证凭证是否有效以及版本兼容性问题[^2]。 当遇到具体的应用场景时,可以根据实际需求调整相应的配置参数以优化性能表现或满足特定业务逻辑的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值