Skip to content

Commit

Permalink
optimize
Browse files Browse the repository at this point in the history
  • Loading branch information
xubo245 committed Oct 27, 2018
1 parent 8cd7d00 commit 5f4115b
Show file tree
Hide file tree
Showing 5 changed files with 227 additions and 131 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public static void main(String[] args) throws Exception {
CarbonProperties.getInstance()
.addProperty(CarbonLoadOptionConstants.ENABLE_CARBON_LOAD_DIRECT_WRITE_TO_STORE_PATH, "true");

String path = "s3a://sdk/WriterOutput";
String path = "s3a://sdk/WriterOutput4";
if (args.length > 3) {
path=args[3];
}
Expand All @@ -62,16 +62,21 @@ public static void main(String[] args) throws Exception {
num = Integer.parseInt(args[4]);
}

Configuration conf = new Configuration(false);
Configuration conf = new Configuration(true);
conf.set(Constants.ACCESS_KEY, args[0]);
conf.set(Constants.SECRET_KEY, args[1]);
conf.set(Constants.ENDPOINT, args[2]);

Field[] fields = new Field[2];
fields[0] = new Field("name", DataTypes.STRING);
fields[1] = new Field("age", DataTypes.INT);
CarbonWriterBuilder builder = CarbonWriter.builder().outputPath(path).withHadoopConf(conf);
CarbonWriter writer = builder.withCsvInput(new Schema(fields)).build();
CarbonWriter writer = CarbonWriter
.builder()
.outputPath(path)
.withHadoopConf(conf)
.withCsvInput(new Schema(fields))
.writtenBy("SDKS3Example")
.build();

for (int i = 0; i < num; i++) {
writer.write(new String[]{"robot" + (i % 10), String.valueOf(i)});
Expand Down
91 changes: 81 additions & 10 deletions store/CSDK/src/CarbonWriter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,75 +15,146 @@
* limitations under the License.
*/

#include <stdexcept>
#include "CarbonWriter.h"

void CarbonWriter::builder(JNIEnv *env) {
if (env == NULL) {
throw std::runtime_error("JNIEnv parameter can't be NULL.");
}
jniEnv = env;
carbonWriter = env->FindClass("org/apache/carbondata/sdk/file/CarbonWriter");
if (carbonWriter == NULL) {
throw std::runtime_error("Can't find the class in java: org/apache/carbondata/sdk/file/CarbonWriter");
}
jmethodID carbonWriterBuilderID = env->GetStaticMethodID(carbonWriter, "builder",
"()Lorg/apache/carbondata/sdk/file/CarbonWriterBuilder;");
if (carbonWriterBuilderID == NULL) {
throw std::runtime_error("Can't find the method in java: carbonWriterBuilder");
}
carbonWriterBuilderObject = env->CallStaticObjectMethod(carbonWriter, carbonWriterBuilderID);
}

bool CarbonWriter::checkBuilder() {
if (carbonWriterBuilderObject == NULL) {
throw std::runtime_error("carbonWriterBuilder Object can't be NULL. Please call builder method first.");
}
}

void CarbonWriter::outputPath(char *path) {
if (path == NULL) {
throw std::runtime_error("path parameter can't be NULL.");
}
checkBuilder();
jclass carbonWriterBuilderClass = jniEnv->GetObjectClass(carbonWriterBuilderObject);
jmethodID carbonWriterBuilderID = jniEnv->GetMethodID(carbonWriterBuilderClass, "outputPath",
jmethodID methodID = jniEnv->GetMethodID(carbonWriterBuilderClass, "outputPath",
"(Ljava/lang/String;)Lorg/apache/carbondata/sdk/file/CarbonWriterBuilder;");
if (methodID == NULL) {
throw std::runtime_error("Can't find the method in java: outputPath");
}
jstring jPath = jniEnv->NewStringUTF(path);
jvalue args[1];
args[0].l = jPath;
carbonWriterBuilderObject = jniEnv->CallObjectMethodA(carbonWriterBuilderObject, carbonWriterBuilderID, args);
carbonWriterBuilderObject = jniEnv->CallObjectMethodA(carbonWriterBuilderObject, methodID, args);
}

void CarbonWriter::withCsvInput(char *jsonSchema) {

if (jsonSchema == NULL) {
throw std::runtime_error("jsonSchema parameter can't be NULL.");
}
checkBuilder();
jclass carbonWriterBuilderClass = jniEnv->GetObjectClass(carbonWriterBuilderObject);
jmethodID carbonWriterBuilderID = jniEnv->GetMethodID(carbonWriterBuilderClass, "withCsvInput",
jmethodID methodID = jniEnv->GetMethodID(carbonWriterBuilderClass, "withCsvInput",
"(Ljava/lang/String;)Lorg/apache/carbondata/sdk/file/CarbonWriterBuilder;");
if (methodID == NULL) {
throw std::runtime_error("Can't find the method in java: withCsvInput");
}
jstring jPath = jniEnv->NewStringUTF(jsonSchema);
jvalue args[1];
args[0].l = jPath;
carbonWriterBuilderObject = jniEnv->CallObjectMethodA(carbonWriterBuilderObject, carbonWriterBuilderID, args);
carbonWriterBuilderObject = jniEnv->CallObjectMethodA(carbonWriterBuilderObject, methodID, args);
if (jniEnv->ExceptionCheck()) {
throw jniEnv->ExceptionOccurred();
}
};

void CarbonWriter::withHadoopConf(char *key, char *value) {
if (key == NULL) {
throw std::runtime_error("key parameter can't be NULL.");
}
if (value == NULL) {
throw std::runtime_error("value parameter can't be NULL.");
}
checkBuilder();
jclass carbonWriterBuilderClass = jniEnv->GetObjectClass(carbonWriterBuilderObject);
jmethodID methodID = jniEnv->GetMethodID(carbonWriterBuilderClass, "withHadoopConf",
"(Ljava/lang/String;Ljava/lang/String;)Lorg/apache/carbondata/sdk/file/CarbonWriterBuilder;");
if (methodID == NULL) {
throw std::runtime_error("Can't find the method in java: withHadoopConf");
}
jvalue args[2];
args[0].l = jniEnv->NewStringUTF(key);
args[1].l = jniEnv->NewStringUTF(value);
carbonWriterBuilderObject = jniEnv->CallObjectMethodA(carbonWriterBuilderObject, methodID, args);
}

void CarbonWriter::writtenBy(char *appName) {
checkBuilder();
jclass carbonWriterBuilderClass = jniEnv->GetObjectClass(carbonWriterBuilderObject);
jmethodID methodID = jniEnv->GetMethodID(carbonWriterBuilderClass, "writtenBy",
"(Ljava/lang/String;)Lorg/apache/carbondata/sdk/file/CarbonWriterBuilder;");
"(Ljava/lang/String;)Lorg/apache/carbondata/sdk/file/CarbonWriterBuilder;");
if (methodID == NULL) {
throw std::runtime_error("Can't find the method in java: writtenBy");
}
jvalue args[1];
args[0].l = jniEnv->NewStringUTF(appName);
carbonWriterBuilderObject = jniEnv->CallObjectMethodA(carbonWriterBuilderObject, methodID, args);
}

void CarbonWriter::build() {
checkBuilder();
jclass carbonWriterBuilderClass = jniEnv->GetObjectClass(carbonWriterBuilderObject);
jmethodID methodID = jniEnv->GetMethodID(carbonWriterBuilderClass, "build",
"()Lorg/apache/carbondata/sdk/file/CarbonWriter;");
if (methodID == NULL) {
throw std::runtime_error("Can't find the method in java: build");
}
carbonWriterObject = jniEnv->CallObjectMethod(carbonWriterBuilderObject, methodID);
carbonWriter = jniEnv->GetObjectClass(carbonWriterObject);
writeID = jniEnv->GetMethodID(carbonWriter, "write", "(Ljava/lang/Object;)V");

if (jniEnv->ExceptionCheck()) {
throw jniEnv->ExceptionOccurred();
}
}

void CarbonWriter::write(jobject obj) {
if (carbonWriterObject == NULL) {
throw std::runtime_error("Please call build first.");
}
if (writeID == NULL) {
carbonWriter = jniEnv->GetObjectClass(carbonWriterObject);
writeID = jniEnv->GetMethodID(carbonWriter, "write", "(Ljava/lang/Object;)V");
if (writeID == NULL) {
throw std::runtime_error("Can't find the method in java: write");
}
}
jvalue args[1];
args[0].l = obj;
jniEnv->CallBooleanMethodA(carbonWriterObject, writeID, args);
if (jniEnv->ExceptionCheck()) {
throw jniEnv->ExceptionOccurred();
}
};

jboolean CarbonWriter::close() {
if (carbonWriterObject == NULL) {
throw std::runtime_error("Please call build first.");
}
jclass carbonWriter = jniEnv->GetObjectClass(carbonWriterObject);
jmethodID closeID = jniEnv->GetMethodID(carbonWriter, "close", "()V");
jniEnv->CallBooleanMethod(carbonWriterObject, closeID);
jmethodID methodID = jniEnv->GetMethodID(carbonWriter, "close", "()V");
if (methodID == NULL) {
throw std::runtime_error("Can't find the method in java: close");
}
jniEnv->CallBooleanMethod(carbonWriterObject, methodID);
if (jniEnv->ExceptionCheck()) {
throw jniEnv->ExceptionOccurred();
}
Expand Down
11 changes: 9 additions & 2 deletions store/CSDK/src/CarbonWriter.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class CarbonWriter {
* carbonWriterBuilder object for building carbonWriter
* it can configure some operation
*/
jobject carbonWriterBuilderObject;
jobject carbonWriterBuilderObject = NULL;

/**
* carbonWriter object for writing data
Expand All @@ -43,7 +43,14 @@ class CarbonWriter {
/**
* write method id
*/
jmethodID writeID;
jmethodID writeID = NULL;

/**
* check whether has called builder
*
* @return true or throw exception
*/
bool checkBuilder();
public:
/**
* create a CarbonWriterBuilder object for building carbonWriter,
Expand Down

0 comments on commit 5f4115b

Please sign in to comment.