Skip to content

Commit

Permalink
Merge 5af2d4e into 33a6dc2
Browse files Browse the repository at this point in the history
  • Loading branch information
xubo245 committed Oct 25, 2018
2 parents 33a6dc2 + 5af2d4e commit ff54c50
Show file tree
Hide file tree
Showing 15 changed files with 770 additions and 187 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ CarbonData is built using Apache Maven, to [build CarbonData](https://github.com
* [CarbonData Pre-aggregate DataMap](https://github.com/apache/carbondata/blob/master/docs/preaggregate-datamap-guide.md)
* [CarbonData Timeseries DataMap](https://github.com/apache/carbondata/blob/master/docs/timeseries-datamap-guide.md)
* [SDK Guide](https://github.com/apache/carbondata/blob/master/docs/sdk-guide.md)
* [CSDK Guide](https://github.com/apache/carbondata/blob/master/docs/csdk-guide.md)
* [Performance Tuning](https://github.com/apache/carbondata/blob/master/docs/performance-tuning.md)
* [S3 Storage](https://github.com/apache/carbondata/blob/master/docs/s3-guide.md)
* [Carbon as Spark's Datasource](https://github.com/apache/carbondata/blob/master/docs/carbon-as-spark-datasource-guide.md)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ public void update(Object value, int ordinal) {
public Object[] getRawData() {
return rawData;
}

public void setRawData(Object[] rawData) {
this.rawData = rawData;
}
Expand Down
114 changes: 10 additions & 104 deletions docs/CSDK-guide.md → docs/csdk-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,106 +30,13 @@ code and without CarbonSession.
In the carbon jars package, there exist a carbondata-sdk.jar,
including SDK reader for CSDK.
## Quick example
```
// 1. init JVM
JavaVM *jvm;
JNIEnv *initJVM() {
JNIEnv *env;
JavaVMInitArgs vm_args;
int parNum = 3;
int res;
JavaVMOption options[parNum];
options[0].optionString = "-Djava.compiler=NONE";
options[1].optionString = "-Djava.class.path=../../sdk/target/carbondata-sdk.jar";
options[2].optionString = "-verbose:jni";
vm_args.version = JNI_VERSION_1_8;
vm_args.nOptions = parNum;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_FALSE;
res = JNI_CreateJavaVM(&jvm, (void **) &env, &vm_args);
if (res < 0) {
fprintf(stderr, "\nCan't create Java VM\n");
exit(1);
}
return env;
}
// 2. create carbon reader and read data
// 2.1 read data from local disk
/**
* test read data from local disk, without projection
*
* @param env jni env
* @return
*/
bool readFromLocalWithoutProjection(JNIEnv *env) {
CarbonReader carbonReaderClass;
carbonReaderClass.builder(env, "../resources/carbondata", "test");
carbonReaderClass.build();
while (carbonReaderClass.hasNext()) {
jobjectArray row = carbonReaderClass.readNextRow();
jsize length = env->GetArrayLength(row);
int j = 0;
for (j = 0; j < length; j++) {
jobject element = env->GetObjectArrayElement(row, j);
char *str = (char *) env->GetStringUTFChars((jstring) element, JNI_FALSE);
printf("%s\t", str);
}
printf("\n");
}
carbonReaderClass.close();
}
// 2.2 read data from S3
/**
* read data from S3
* parameter is ak sk endpoint
*
* @param env jni env
* @param argv argument vector
* @return
*/
bool readFromS3(JNIEnv *env, char *argv[]) {
CarbonReader reader;
char *args[3];
// "your access key"
args[0] = argv[1];
// "your secret key"
args[1] = argv[2];
// "your endPoint"
args[2] = argv[3];
reader.builder(env, "s3a://sdk/WriterOutput", "test");
reader.withHadoopConf(3, args);
reader.build();
printf("\nRead data from S3:\n");
while (reader.hasNext()) {
jobjectArray row = reader.readNextRow();
jsize length = env->GetArrayLength(row);
int j = 0;
for (j = 0; j < length; j++) {
jobject element = env->GetObjectArrayElement(row, j);
char *str = (char *) env->GetStringUTFChars((jstring) element, JNI_FALSE);
printf("%s\t", str);
}
printf("\n");
}
reader.close();
}
// 3. destory JVM
(jvm)->DestroyJavaVM();
```
Find example code at main.cpp of CSDK module

Please find example code at main.cpp of CSDK module

When users use C++ to read carbon files, users should init JVM first. Then users create
carbon reader and read data.There are some example code of read data from local disk
and read data from S3 at main.cpp of CSDK module. Finally, Finally, users need to
release the memory and destroy JVM.

## API List
```
Expand Down Expand Up @@ -181,11 +88,10 @@ Find example code at main.cpp of CSDK module
jboolean hasNext();
/**
* read next row from data
*
* @return object array of one row
* read next carbonRow from data
* @return carbonRow object of one row
*/
jobjectArray readNextRow();
jobject readNextRow();
/**
* close the carbon reader
Expand Down
2 changes: 1 addition & 1 deletion docs/documentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Apache CarbonData is a new big data file format for faster interactive query usi

**CarbonData SQL Language Reference:** CarbonData extends the Spark SQL language and adds several [DDL](./ddl-of-carbondata.md) and [DML](./dml-of-carbondata.md) statements to support operations on it.Refer to the [Reference Manual](./language-manual.md) to understand the supported features and functions.

**Programming Guides:** You can read our guides about [APIs supported](./sdk-guide.md) to learn how to integrate CarbonData with your applications.
**Programming Guides:** You can read our guides about [Java APIs supported](./sdk-guide.md) or [C++ APIs supported](./csdk-guide.md) to learn how to integrate CarbonData with your applications.



Expand Down
22 changes: 11 additions & 11 deletions store/CSDK/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
cmake_minimum_required (VERSION 2.8)
project (CJDK)
cmake_minimum_required(VERSION 2.8)
project(CJDK)
set(CMAKE_BUILD_TYPE Debug)
SET (CMAKE_INSTALL_RPATH_USE_LINK_PATH true)
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH true)

find_package (JNI REQUIRED)
find_package(JNI REQUIRED)

include_directories (${JNI_INCLUDE_DIRS})
include_directories(${JNI_INCLUDE_DIRS})

set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set (SOURCE_FILES CarbonReader.cpp CarbonReader.h main.cpp)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES CarbonReader.cpp CarbonReader.h main.cpp CarbonRow.h CarbonRow.cpp)

add_executable (CJDK ${SOURCE_FILES})
get_filename_component (JAVA_JVM_LIBRARY_DIR ${JAVA_JVM_LIBRARY} DIRECTORY)
message (${JAVA_JVM_LIBRARY_DIR})
target_link_libraries (CJDK ${JAVA_JVM_LIBRARY} )
add_executable(CJDK ${SOURCE_FILES})
get_filename_component(JAVA_JVM_LIBRARY_DIR ${JAVA_JVM_LIBRARY} DIRECTORY)
message(${JAVA_JVM_LIBRARY_DIR})
target_link_libraries(CJDK ${JAVA_JVM_LIBRARY})

25 changes: 11 additions & 14 deletions store/CSDK/CarbonReader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,14 @@
#include <jni.h>

jobject CarbonReader::builder(JNIEnv *env, char *path, char *tableName) {

jniEnv = env;
jclass carbonReaderClass = env->FindClass("org/apache/carbondata/sdk/file/CarbonReader");
jmethodID carbonReaderBuilderID = env->GetStaticMethodID(carbonReaderClass, "builder",
"(Ljava/lang/String;Ljava/lang/String;)Lorg/apache/carbondata/sdk/file/CarbonReaderBuilder;");
jstring jpath = env->NewStringUTF(path);
jstring jPath = env->NewStringUTF(path);
jstring jtableName = env->NewStringUTF(tableName);
jvalue args[2];
args[0].l = jpath;
args[0].l = jPath;
args[1].l = jtableName;
carbonReaderBuilderObject = env->CallStaticObjectMethodA(carbonReaderClass, carbonReaderBuilderID, args);
return carbonReaderBuilderObject;
Expand All @@ -38,9 +37,9 @@ jobject CarbonReader::builder(JNIEnv *env, char *path) {
jclass carbonReaderClass = env->FindClass("org/apache/carbondata/sdk/file/CarbonReader");
jmethodID carbonReaderBuilderID = env->GetStaticMethodID(carbonReaderClass, "builder",
"(Ljava/lang/String;)Lorg/apache/carbondata/sdk/file/CarbonReaderBuilder;");
jstring jpath = env->NewStringUTF(path);
jstring jPath = env->NewStringUTF(path);
jvalue args[1];
args[0].l = jpath;
args[0].l = jPath;
carbonReaderBuilderObject = env->CallStaticObjectMethodA(carbonReaderClass, carbonReaderBuilderID, args);
return carbonReaderBuilderObject;
}
Expand Down Expand Up @@ -79,21 +78,19 @@ jobject CarbonReader::build() {
jmethodID buildID = jniEnv->GetMethodID(carbonReaderBuilderClass, "build",
"()Lorg/apache/carbondata/sdk/file/CarbonReader;");
carbonReaderObject = jniEnv->CallObjectMethod(carbonReaderBuilderObject, buildID);
jclass carbonReader = jniEnv->GetObjectClass(carbonReaderObject);
hasNextID = jniEnv->GetMethodID(carbonReader, "hasNext", "()Z");
readNextRowID = jniEnv->GetMethodID(carbonReader, "readNextRow",
"()Ljava/lang/Object;");
return carbonReaderObject;
}

jboolean CarbonReader::hasNext() {
jclass carbonReader = jniEnv->GetObjectClass(carbonReaderObject);
jmethodID hasNextID = jniEnv->GetMethodID(carbonReader, "hasNext", "()Z");
unsigned char hasNext = jniEnv->CallBooleanMethod(carbonReaderObject, hasNextID);
return hasNext;
return jniEnv->CallBooleanMethod(carbonReaderObject, hasNextID);
}

jobjectArray CarbonReader::readNextRow() {
jclass carbonReader = jniEnv->GetObjectClass(carbonReaderObject);
jmethodID readNextRow2ID = jniEnv->GetMethodID(carbonReader, "readNextStringRow", "()[Ljava/lang/Object;");
jobjectArray row = (jobjectArray) jniEnv->CallObjectMethod(carbonReaderObject, readNextRow2ID);
return row;
jobject CarbonReader::readNextRow() {
return (jobject) jniEnv->CallObjectMethod(carbonReaderObject, readNextRowID);
}

jboolean CarbonReader::close() {
Expand Down
25 changes: 18 additions & 7 deletions store/CSDK/CarbonReader.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,16 @@
#include <jni.h>

class CarbonReader {
public:
private:
/**
* jni env
* hasNext jmethodID
*/
JNIEnv *jniEnv;
jmethodID hasNextID;

/**
* readNextRow jmethodID
*/
jmethodID readNextRowID;

/**
* carbonReaderBuilder object for building carbonReader
Expand All @@ -35,6 +40,13 @@ class CarbonReader {
*/
jobject carbonReaderObject;

public:

/**
* jni env
*/
JNIEnv *jniEnv;

/**
* create a CarbonReaderBuilder object for building carbonReader,
* CarbonReaderBuilder object can configure different parameter
Expand Down Expand Up @@ -90,11 +102,10 @@ class CarbonReader {
jboolean hasNext();

/**
* read next row from data
*
* @return object array of one row
* read next carbon Row from data
* @return carbon Row object of one row
*/
jobjectArray readNextRow();
jobject readNextRow();

/**
* close the carbon reader
Expand Down

0 comments on commit ff54c50

Please sign in to comment.