2

我正在尝试使用 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 查询。我见过有人建议 df.saveToMemSQL(..) 但是现在似乎这种方法在 DataFrameFunctions 中。

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

编辑:好的,我想我误读了一些东西。saveToMemSQL 不创建表。谢谢。

4

1 回答 1

0

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

于 2015-11-23T17:33:45.770 回答