我想在Spark中使用MongoDB提供的数据运行k-means。 我有一个工作实施例中,其作用对一个平面文件:如何在kmeans中映射Spark中的MongoDB数据?
sc = SparkContext(appName="KMeansExample") # SparkContext
data = sc.textFile("/home/mhoeller/kmeans_data.txt")
parsedData = data.map(lambda line: array([int(x) for x in line.split(' ')]))
clusters = KMeans.train(parsedData, 2, maxIterations=10, initializationMode="random")
这是平面文件的格式为:
现在我想用MongoDB的更换简单文件:
spark = SparkSession \
.builder \
.appName("myApp") \
.config("spark.mongodb.input.uri", "mongodb://127.0.0.1/ycsb.usertable") \
.config("spark.mongodb.output.uri", "mongodb:/127.0.0.1/ycsb.usertable") \
.getOrCreate()
df = spark.read.format("com.mongodb.spark.sql.DefaultSource").option("uri","mongodb://127.0.0.1/ycsb.usertable").load()
# <<<< Here I am missing the parsing >>>>>
clusters = KMeans.train(parsedData, 2, maxIterations=10, initializationMode="random")
我喜欢了解如何映射df中的数据,以便它可以用作kmeans的输入。
的数据库的 “布局” 是:
根
| - _id:字符串(可为空=真)
| - field0:二进制(可为空=真)
| - FIELD1:二进制(可空=真)
| - 场2:二进制(可为空=真)
| - 场3:二进制(可为空=真)
| - 字段4:二进制(可为空=真)
| - 字段5:二进制(空值=真)
| - 基尔D6:二进制(可为空=真)
| - 字段7:二进制(可为空=真)
| - 字段8:二元的(可为空=真)
| - 字段9:二元的(可为空=真)