mongodb_pyspark
使用mongodb作为数据源,pyspark直接读取mongodb数据源:
1、首先命令行下执行如下代码下载jar或依赖包:
spark-shell --conf "spark.mongodb.input.uri=mongodb://localhost:27017/flights.av" --conf "spark.mongodb.output.uri=mongodb://localhost:27017/flights.output" --packages org.mongodb.spark:mongo-spark-connector_2.11:2.3.1
2.11是scala版本 2.3.1是spark版本
会自动帮你下载相关的各种依赖包
2、编写mongodb_pyspark程序:
my_spark = SparkSession.builder.appName("MyApp").config("spark.mongodb.input.uri","mongodb://10.101.1.101:27017/flights.av")
.config("spark.mongodb.output.uri","mongodb://10.101.1.101:27017/flights.output").config('spark.jars.packages','org.mongodb.spark:mongo-spark-connector_2.11:2.3.1').getOrCreate()
#df = my_spark.read.format('com.mongodb.spark.sql.DefaultSource').load()
df = my_spark.read.format("com.mongodb.spark.sql.DefaultSource")
.option("uri","mongodb://10.101.1.101:27017/flights.av")#可以在SparkSession时指定输入源,也可以在创建dataframe时指定数据源
.option("spark.mongodb.input.partitioner","MongoShardedPartitioner").load() #一般不需要指定partitioner,但如果不指定报错,则按此方法指定即可。
df.createOrReplaceTempView("df_temp") #将mongodb的collocation转换为临时表
my_spark.sql("select * from df_temp where filename=561/SD.201707031619.seed").show() #从input.uri(flights.av)中读取所有filename查询条件的数据
df_temp.columns //获取列名 (数组)
row=df_temp.collect()[0] //返回所有行(Row对象)数组
row.asDict(True).get('filename') //转为字典类型