在 Spark 中将 DataFrame 写入 MemSQL Table

Writing DataFrame to MemSQL Table in Spark

我正在尝试使用 Spark 和 MemSQL 连接器将 .parquet 文件加载到 MemSQL 数据库中。

package com.memsql.spark

import com.memsql.spark.context._

import org.apache.spark._
import org.apache.spark.sql._
import org.apache.spark.sql.types._

import com.memsql.spark.connector._
import com.mysql.jdbc._

object readParquet {
    def main(args: Array[String]){
    val conf = new SparkConf().setAppName("ReadParquet")
    val sc = new SparkContext(conf)
    sc.addJar("/data/applications/spark-1.5.1-bin-hadoop2.6/lib/mysql-connector-java-5.1.37-bin.jar")
    sc.addJar("/data/applications/spark-1.5.1-bin-hadoop2.6/lib/memsql-connector_2.10-1.1.0.jar")
    Class.forName("com.mysql.jdbc.Driver")

    val host = "xxxx"
    val port = 3306
    val dbName = "WP1"
    val user = "root"
    val password = ""
    val tableName = "rt_acc"

    val memsqlContext = new com.memsql.spark.context.MemSQLContext(sc, host, port, user, password)

    val rt_acc = memsqlContext.read.parquet("tachyon://localhost:19998/rt_acc.parquet")
    val func_rt_acc = new com.memsql.spark.connector.DataFrameFunctions(rt_acc)
    func_rt_acc.saveToMemSQL(dbName, tableName, host, port, user, password)
    }
}

我相当确定 Tachyon 不会导致问题,因为如果从磁盘加载也会出现相同的异常,我可以在数据帧上使用 sql-queries。 我见过有人建议 df.saveToMemSQL(..) 但是现在这个方法似乎在 DataFrameFunctions 中。

table 还不存在,但 saveToMemSQL 应该按照文档和源代码告诉我的那样创建 TABLE。

编辑:好的,我想我误读了什么。 saveToMemSQL 不会创建 table。谢谢

尝试使用 createMemSQLTableAs 而不是 saveToMemSQL
saveToMemSQL 将数据帧加载到现有的 table 中,而 createMemSQLTableAs 创建 table 然后加载它。 它还 returns 一个方便的数据框包装 MemSQL table :).