提交 ec546bff 编写于 作者: weicheng.mao's avatar weicheng.mao

Initial commit

上级
流水线 #46720 已取消 于阶段
# Default ignored files
/shelf/
/workspace.xml
# Datasource local storage ignored files
/../../../../../../../:\Users\Pica\worker\MaxCompute-Spark\spark-2.x\.idea/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/
spark-examples_2.11
\ No newline at end of file
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<ScalaCodeStyleSettings>
<option name="MULTILINE_STRING_CLOSING_QUOTES_ON_NEW_LINE" value="true" />
</ScalaCodeStyleSettings>
</code_scheme>
</component>
\ No newline at end of file
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</state>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="spark-2.x" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel>
<module name="spark-2.x" target="6" />
</bytecodeTargetLevel>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="http://maven.aliyun.com/nexus/content/repositories/central/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
</component>
</project>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.101tec:zkclient:0.10">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/101tec/zkclient/0.10/zkclient-0.10.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/101tec/zkclient/0.10/zkclient-0.10-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/101tec/zkclient/0.10/zkclient-0.10-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.alibaba:fastjson:1.2.45">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/alibaba/fastjson/1.2.45/fastjson-1.2.45.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/alibaba/fastjson/1.2.45/fastjson-1.2.45-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/alibaba/fastjson/1.2.45/fastjson-1.2.45-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun.datahub:aliyun-sdk-datahub:2.9.4-public">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/datahub/aliyun-sdk-datahub/2.9.4-public/aliyun-sdk-datahub-2.9.4-public.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/datahub/aliyun-sdk-datahub/2.9.4-public/aliyun-sdk-datahub-2.9.4-public-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/datahub/aliyun-sdk-datahub/2.9.4-public/aliyun-sdk-datahub-2.9.4-public-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun.emr:emr-datahub_2.11:1.6.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/emr/emr-datahub_2.11/1.6.0/emr-datahub_2.11-1.6.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/emr/emr-datahub_2.11/1.6.0/emr-datahub_2.11-1.6.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/emr/emr-datahub_2.11/1.6.0/emr-datahub_2.11-1.6.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun.odps:cupid-sdk:3.3.8-public">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/odps/cupid-sdk/3.3.8-public/cupid-sdk-3.3.8-public.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/odps/cupid-sdk/3.3.8-public/cupid-sdk-3.3.8-public-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/odps/cupid-sdk/3.3.8-public/cupid-sdk-3.3.8-public-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun.odps:hadoop-fs-oss:3.3.8-public">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/odps/hadoop-fs-oss/3.3.8-public/hadoop-fs-oss-3.3.8-public.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/odps/hadoop-fs-oss/3.3.8-public/hadoop-fs-oss-3.3.8-public-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/odps/hadoop-fs-oss/3.3.8-public/hadoop-fs-oss-3.3.8-public-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun.odps:odps-sdk-commons:0.30.8-public">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/odps/odps-sdk-commons/0.30.8-public/odps-sdk-commons-0.30.8-public.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/odps/odps-sdk-commons/0.30.8-public/odps-sdk-commons-0.30.8-public-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/odps/odps-sdk-commons/0.30.8-public/odps-sdk-commons-0.30.8-public-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun.odps:odps-sdk-core:0.30.8-public">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/odps/odps-sdk-core/0.30.8-public/odps-sdk-core-0.30.8-public.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/odps/odps-sdk-core/0.30.8-public/odps-sdk-core-0.30.8-public-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/odps/odps-sdk-core/0.30.8-public/odps-sdk-core-0.30.8-public-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun.odps:odps-spark-datasource_2.11:3.3.8-public">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/odps/odps-spark-datasource_2.11/3.3.8-public/odps-spark-datasource_2.11-3.3.8-public.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/odps/odps-spark-datasource_2.11/3.3.8-public/odps-spark-datasource_2.11-3.3.8-public-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/odps/odps-spark-datasource_2.11/3.3.8-public/odps-spark-datasource_2.11-3.3.8-public-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun.odps:streaming-lib:3.3.8-public">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/odps/streaming-lib/3.3.8-public/streaming-lib-3.3.8-public.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/odps/streaming-lib/3.3.8-public/streaming-lib-3.3.8-public-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/odps/streaming-lib/3.3.8-public/streaming-lib-3.3.8-public-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun.openservices:aliyun-log:0.6.15">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/openservices/aliyun-log/0.6.15/aliyun-log-0.6.15.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/openservices/aliyun-log/0.6.15/aliyun-log-0.6.15-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/openservices/aliyun-log/0.6.15/aliyun-log-0.6.15-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun.openservices:log-loghub-producer:0.1.11">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/openservices/log-loghub-producer/0.1.11/log-loghub-producer-0.1.11.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/openservices/log-loghub-producer/0.1.11/log-loghub-producer-0.1.11-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/openservices/log-loghub-producer/0.1.11/log-loghub-producer-0.1.11-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun.openservices:loghub-client-lib:0.6.3">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/openservices/loghub-client-lib/0.6.3/loghub-client-lib-0.6.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/openservices/loghub-client-lib/0.6.3/loghub-client-lib-0.6.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/openservices/loghub-client-lib/0.6.3/loghub-client-lib-0.6.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun.oss:aliyun-sdk-oss:2.2.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/oss/aliyun-sdk-oss/2.2.1/aliyun-sdk-oss-2.2.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/oss/aliyun-sdk-oss/2.2.1/aliyun-sdk-oss-2.2.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/aliyun/oss/aliyun-sdk-oss/2.2.1/aliyun-sdk-oss-2.2.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.carrotsearch:hppc:0.7.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/carrotsearch/hppc/0.7.2/hppc-0.7.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/carrotsearch/hppc/0.7.2/hppc-0.7.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/carrotsearch/hppc/0.7.2/hppc-0.7.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.chuusai:shapeless_2.11:2.3.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/chuusai/shapeless_2.11/2.3.2/shapeless_2.11-2.3.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/chuusai/shapeless_2.11/2.3.2/shapeless_2.11-2.3.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/chuusai/shapeless_2.11/2.3.2/shapeless_2.11-2.3.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.clearspring.analytics:stream:2.7.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/clearspring/analytics/stream/2.7.0/stream-2.7.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/clearspring/analytics/stream/2.7.0/stream-2.7.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/clearspring/analytics/stream/2.7.0/stream-2.7.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.esotericsoftware:kryo-shaded:3.0.3">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/esotericsoftware/kryo-shaded/3.0.3/kryo-shaded-3.0.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/esotericsoftware/kryo-shaded/3.0.3/kryo-shaded-3.0.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/esotericsoftware/kryo-shaded/3.0.3/kryo-shaded-3.0.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.esotericsoftware:minlog:1.3.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/esotericsoftware/minlog/1.3.0/minlog-1.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/esotericsoftware/minlog/1.3.0/minlog-1.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/esotericsoftware/minlog/1.3.0/minlog-1.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.6.7">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/fasterxml/jackson/core/jackson-annotations/2.6.7/jackson-annotations-2.6.7.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/fasterxml/jackson/core/jackson-annotations/2.6.7/jackson-annotations-2.6.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/fasterxml/jackson/core/jackson-annotations/2.6.7/jackson-annotations-2.6.7-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.core:jackson-core:2.6.7">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/fasterxml/jackson/core/jackson-core/2.6.7/jackson-core-2.6.7.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/fasterxml/jackson/core/jackson-core/2.6.7/jackson-core-2.6.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/fasterxml/jackson/core/jackson-core/2.6.7/jackson-core-2.6.7-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.core:jackson-databind:2.6.7.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/fasterxml/jackson/core/jackson-databind/2.6.7.1/jackson-databind-2.6.7.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/fasterxml/jackson/core/jackson-databind/2.6.7.1/jackson-databind-2.6.7.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/fasterxml/jackson/core/jackson-databind/2.6.7.1/jackson-databind-2.6.7.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.module:jackson-module-paranamer:2.7.9">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/fasterxml/jackson/module/jackson-module-paranamer/2.7.9/jackson-module-paranamer-2.7.9.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/fasterxml/jackson/module/jackson-module-paranamer/2.7.9/jackson-module-paranamer-2.7.9-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/fasterxml/jackson/module/jackson-module-paranamer/2.7.9/jackson-module-paranamer-2.7.9-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.module:jackson-module-scala_2.11:2.6.7.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/fasterxml/jackson/module/jackson-module-scala_2.11/2.6.7.1/jackson-module-scala_2.11-2.6.7.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/fasterxml/jackson/module/jackson-module-scala_2.11/2.6.7.1/jackson-module-scala_2.11-2.6.7.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/fasterxml/jackson/module/jackson-module-scala_2.11/2.6.7.1/jackson-module-scala_2.11-2.6.7.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.github.fommil.netlib:core:1.1.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/github/fommil/netlib/core/1.1.2/core-1.1.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/github/fommil/netlib/core/1.1.2/core-1.1.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/github/fommil/netlib/core/1.1.2/core-1.1.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.github.luben:zstd-jni:1.3.2-2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/github/luben/zstd-jni/1.3.2-2/zstd-jni-1.3.2-2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/github/luben/zstd-jni/1.3.2-2/zstd-jni-1.3.2-2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/github/luben/zstd-jni/1.3.2-2/zstd-jni-1.3.2-2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.github.rholder:guava-retrying:2.0.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/github/rholder/guava-retrying/2.0.0/guava-retrying-2.0.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/github/rholder/guava-retrying/2.0.0/guava-retrying-2.0.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/github/rholder/guava-retrying/2.0.0/guava-retrying-2.0.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.github.rwl:jtransforms:2.4.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/github/rwl/jtransforms/2.4.0/jtransforms-2.4.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/github/rwl/jtransforms/2.4.0/jtransforms-2.4.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/github/rwl/jtransforms/2.4.0/jtransforms-2.4.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.google.code.findbugs:jsr305:1.3.9">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.google.code.gson:gson:2.2.4">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/google/code/gson/gson/2.2.4/gson-2.2.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/google/code/gson/gson/2.2.4/gson-2.2.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/google/code/gson/gson/2.2.4/gson-2.2.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.google.guava:guava:14.0.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/google/guava/guava/14.0.1/guava-14.0.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/google/guava/guava/14.0.1/guava-14.0.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/google/guava/guava/14.0.1/guava-14.0.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.google.protobuf:protobuf-java:2.5.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/google/protobuf/protobuf-java/2.5.0/protobuf-java-2.5.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/google/protobuf/protobuf-java/2.5.0/protobuf-java-2.5.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/google/protobuf/protobuf-java/2.5.0/protobuf-java-2.5.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.jamesmurty.utils:java-xmlbuilder:1.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/jamesmurty/utils/java-xmlbuilder/1.1/java-xmlbuilder-1.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/jamesmurty/utils/java-xmlbuilder/1.1/java-xmlbuilder-1.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/jamesmurty/utils/java-xmlbuilder/1.1/java-xmlbuilder-1.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.ning:compress-lzf:1.0.3">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/ning/compress-lzf/1.0.3/compress-lzf-1.0.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/ning/compress-lzf/1.0.3/compress-lzf-1.0.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/ning/compress-lzf/1.0.3/compress-lzf-1.0.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.sun.istack:istack-commons-runtime:2.16">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/sun/istack/istack-commons-runtime/2.16/istack-commons-runtime-2.16.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/sun/istack/istack-commons-runtime/2.16/istack-commons-runtime-2.16-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/sun/istack/istack-commons-runtime/2.16/istack-commons-runtime-2.16-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.sun.xml.bind:jaxb-core:2.2.7">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/sun/xml/bind/jaxb-core/2.2.7/jaxb-core-2.2.7.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/sun/xml/bind/jaxb-core/2.2.7/jaxb-core-2.2.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/sun/xml/bind/jaxb-core/2.2.7/jaxb-core-2.2.7-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.sun.xml.bind:jaxb-impl:2.2.7">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/sun/xml/bind/jaxb-impl/2.2.7/jaxb-impl-2.2.7.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/sun/xml/bind/jaxb-impl/2.2.7/jaxb-impl-2.2.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/sun/xml/bind/jaxb-impl/2.2.7/jaxb-impl-2.2.7-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.sun.xml.fastinfoset:FastInfoset:1.2.12">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/sun/xml/fastinfoset/FastInfoset/1.2.12/FastInfoset-1.2.12.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/sun/xml/fastinfoset/FastInfoset/1.2.12/FastInfoset-1.2.12-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/sun/xml/fastinfoset/FastInfoset/1.2.12/FastInfoset-1.2.12-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.thoughtworks.paranamer:paranamer:2.3">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/thoughtworks/paranamer/paranamer/2.3/paranamer-2.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/thoughtworks/paranamer/paranamer/2.3/paranamer-2.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/thoughtworks/paranamer/paranamer/2.3/paranamer-2.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.twitter:chill_2.11:0.8.4">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/twitter/chill_2.11/0.8.4/chill_2.11-0.8.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/twitter/chill_2.11/0.8.4/chill_2.11-0.8.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/twitter/chill_2.11/0.8.4/chill_2.11-0.8.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.twitter:chill-java:0.8.4">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/twitter/chill-java/0.8.4/chill-java-0.8.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/twitter/chill-java/0.8.4/chill-java-0.8.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/twitter/chill-java/0.8.4/chill-java-0.8.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.typesafe.akka:akka-actor_2.11:2.3.6">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/typesafe/akka/akka-actor_2.11/2.3.6/akka-actor_2.11-2.3.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/typesafe/akka/akka-actor_2.11/2.3.6/akka-actor_2.11-2.3.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/typesafe/akka/akka-actor_2.11/2.3.6/akka-actor_2.11-2.3.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.typesafe:config:1.2.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/typesafe/config/1.2.1/config-1.2.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/typesafe/config/1.2.1/config-1.2.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/typesafe/config/1.2.1/config-1.2.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.univocity:univocity-parsers:2.5.9">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/univocity/univocity-parsers/2.5.9/univocity-parsers-2.5.9.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/univocity/univocity-parsers/2.5.9/univocity-parsers-2.5.9-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/univocity/univocity-parsers/2.5.9/univocity-parsers-2.5.9-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.vlkan:flatbuffers:1.2.0-3f79e055">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/vlkan/flatbuffers/1.2.0-3f79e055/flatbuffers-1.2.0-3f79e055.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/vlkan/flatbuffers/1.2.0-3f79e055/flatbuffers-1.2.0-3f79e055-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/com/vlkan/flatbuffers/1.2.0-3f79e055/flatbuffers-1.2.0-3f79e055-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-beanutils:commons-beanutils:1.8.3">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-beanutils:commons-beanutils-core:1.8.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-beanutils/commons-beanutils-core/1.8.0/commons-beanutils-core-1.8.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-beanutils/commons-beanutils-core/1.8.0/commons-beanutils-core-1.8.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-beanutils/commons-beanutils-core/1.8.0/commons-beanutils-core-1.8.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-cli:commons-cli:1.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-cli/commons-cli/1.2/commons-cli-1.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-cli/commons-cli/1.2/commons-cli-1.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-cli/commons-cli/1.2/commons-cli-1.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-codec:commons-codec:1.10">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-codec/commons-codec/1.10/commons-codec-1.10.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-codec/commons-codec/1.10/commons-codec-1.10-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-codec/commons-codec/1.10/commons-codec-1.10-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-collections:commons-collections:3.2.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-configuration:commons-configuration:1.6">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-configuration/commons-configuration/1.6/commons-configuration-1.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-configuration/commons-configuration/1.6/commons-configuration-1.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-configuration/commons-configuration/1.6/commons-configuration-1.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-digester:commons-digester:1.8">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-digester/commons-digester/1.8/commons-digester-1.8.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-digester/commons-digester/1.8/commons-digester-1.8-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-digester/commons-digester/1.8/commons-digester-1.8-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-httpclient:commons-httpclient:3.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-io:commons-io:2.4">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-io/commons-io/2.4/commons-io-2.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-io/commons-io/2.4/commons-io-2.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-io/commons-io/2.4/commons-io-2.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-lang:commons-lang:2.6">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-lang/commons-lang/2.6/commons-lang-2.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-lang/commons-lang/2.6/commons-lang-2.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-lang/commons-lang/2.6/commons-lang-2.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-logging:commons-logging:1.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-logging/commons-logging/1.2/commons-logging-1.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-logging/commons-logging/1.2/commons-logging-1.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-net:commons-net:2.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-net/commons-net/2.2/commons-net-2.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-net/commons-net/2.2/commons-net-2.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-net/commons-net/2.2/commons-net-2.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-pool:commons-pool:1.6">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-pool/commons-pool/1.6/commons-pool-1.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-pool/commons-pool/1.6/commons-pool-1.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-pool/commons-pool/1.6/commons-pool-1.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-validator:commons-validator:1.4.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-validator/commons-validator/1.4.0/commons-validator-1.4.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-validator/commons-validator/1.4.0/commons-validator-1.4.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/commons-validator/commons-validator/1.4.0/commons-validator-1.4.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.airlift:aircompressor:0.8">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/airlift/aircompressor/0.8/aircompressor-0.8.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/airlift/aircompressor/0.8/aircompressor-0.8-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/airlift/aircompressor/0.8/aircompressor-0.8-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.dropwizard.metrics:metrics-core:3.1.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/dropwizard/metrics/metrics-core/3.1.5/metrics-core-3.1.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/dropwizard/metrics/metrics-core/3.1.5/metrics-core-3.1.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/dropwizard/metrics/metrics-core/3.1.5/metrics-core-3.1.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.dropwizard.metrics:metrics-graphite:3.1.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/dropwizard/metrics/metrics-graphite/3.1.5/metrics-graphite-3.1.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/dropwizard/metrics/metrics-graphite/3.1.5/metrics-graphite-3.1.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/dropwizard/metrics/metrics-graphite/3.1.5/metrics-graphite-3.1.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.dropwizard.metrics:metrics-json:3.1.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/dropwizard/metrics/metrics-json/3.1.5/metrics-json-3.1.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/dropwizard/metrics/metrics-json/3.1.5/metrics-json-3.1.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/dropwizard/metrics/metrics-json/3.1.5/metrics-json-3.1.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.dropwizard.metrics:metrics-jvm:3.1.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/dropwizard/metrics/metrics-jvm/3.1.5/metrics-jvm-3.1.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/dropwizard/metrics/metrics-jvm/3.1.5/metrics-jvm-3.1.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/dropwizard/metrics/metrics-jvm/3.1.5/metrics-jvm-3.1.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.netty:netty:3.9.9.Final">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/netty/netty/3.9.9.Final/netty-3.9.9.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/netty/netty/3.9.9.Final/netty-3.9.9.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/netty/netty/3.9.9.Final/netty-3.9.9.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.netty:netty-all:4.1.17.Final">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/netty/netty-all/4.1.17.Final/netty-all-4.1.17.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/netty/netty-all/4.1.17.Final/netty-all-4.1.17.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/io/netty/netty-all/4.1.17.Final/netty-all-4.1.17.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: javax.activation:activation:1.1.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/activation/activation/1.1.1/activation-1.1.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/activation/activation/1.1.1/activation-1.1.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/activation/activation/1.1.1/activation-1.1.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: javax.annotation:javax.annotation-api:1.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: javax.mail:mail:1.4.7">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/mail/mail/1.4.7/mail-1.4.7.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/mail/mail/1.4.7/mail-1.4.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/mail/mail/1.4.7/mail-1.4.7-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: javax.servlet:javax.servlet-api:3.1.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: javax.validation:validation-api:1.1.0.Final">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/validation/validation-api/1.1.0.Final/validation-api-1.1.0.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/validation/validation-api/1.1.0.Final/validation-api-1.1.0.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/validation/validation-api/1.1.0.Final/validation-api-1.1.0.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: javax.ws.rs:javax.ws.rs-api:2.0.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/ws/rs/javax.ws.rs-api/2.0.1/javax.ws.rs-api-2.0.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/ws/rs/javax.ws.rs-api/2.0.1/javax.ws.rs-api-2.0.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/ws/rs/javax.ws.rs-api/2.0.1/javax.ws.rs-api-2.0.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: javax.xml.bind:jaxb-api:2.2.7">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/xml/bind/jaxb-api/2.2.7/jaxb-api-2.2.7.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/xml/bind/jaxb-api/2.2.7/jaxb-api-2.2.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/xml/bind/jaxb-api/2.2.7/jaxb-api-2.2.7-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: javax.xml.bind:jsr173_api:1.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/xml/bind/jsr173_api/1.0/jsr173_api-1.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/xml/bind/jsr173_api/1.0/jsr173_api-1.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/javax/xml/bind/jsr173_api/1.0/jsr173_api-1.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: joda-time:joda-time:2.9.9">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/joda-time/joda-time/2.9.9/joda-time-2.9.9.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/joda-time/joda-time/2.9.9/joda-time-2.9.9-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/joda-time/joda-time/2.9.9/joda-time-2.9.9-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: log4j:log4j:1.2.17">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/log4j/log4j/1.2.17/log4j-1.2.17.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/log4j/log4j/1.2.17/log4j-1.2.17-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/log4j/log4j/1.2.17/log4j-1.2.17-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.debasishg:redisclient_2.11:3.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/debasishg/redisclient_2.11/3.5/redisclient_2.11-3.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/debasishg/redisclient_2.11/3.5/redisclient_2.11-3.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/debasishg/redisclient_2.11/3.5/redisclient_2.11-3.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.iharder:base64:2.3.8">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/iharder/base64/2.3.8/base64-2.3.8.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/iharder/base64/2.3.8/base64-2.3.8-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/iharder/base64/2.3.8/base64-2.3.8-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.java.dev.jets3t:jets3t:0.9.4">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/java/dev/jets3t/jets3t/0.9.4/jets3t-0.9.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/java/dev/jets3t/jets3t/0.9.4/jets3t-0.9.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/java/dev/jets3t/jets3t/0.9.4/jets3t-0.9.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.razorvine:pyrolite:4.13">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/razorvine/pyrolite/4.13/pyrolite-4.13.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/razorvine/pyrolite/4.13/pyrolite-4.13-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/razorvine/pyrolite/4.13/pyrolite-4.13-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.sf.ezmorph:ezmorph:1.0.6">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/sf/ezmorph/ezmorph/1.0.6/ezmorph-1.0.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/sf/ezmorph/ezmorph/1.0.6/ezmorph-1.0.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/sf/ezmorph/ezmorph/1.0.6/ezmorph-1.0.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.sf.json-lib:json-lib:jdk15:2.4">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/sf/json-lib/json-lib/2.4/json-lib-2.4-jdk15.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/sf/json-lib/json-lib/2.4/json-lib-2.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/sf/json-lib/json-lib/2.4/json-lib-2.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.sf.opencsv:opencsv:2.3">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/sf/opencsv/opencsv/2.3/opencsv-2.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/sf/opencsv/opencsv/2.3/opencsv-2.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/sf/opencsv/opencsv/2.3/opencsv-2.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.sf.py4j:py4j:0.10.6">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/sf/py4j/py4j/0.10.6/py4j-0.10.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/sf/py4j/py4j/0.10.6/py4j-0.10.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/sf/py4j/py4j/0.10.6/py4j-0.10.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.sourceforge.f2j:arpack_combined_all:0.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/sourceforge/f2j/arpack_combined_all/0.1/arpack_combined_all-0.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/sourceforge/f2j/arpack_combined_all/0.1/arpack_combined_all-0.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/sourceforge/f2j/arpack_combined_all/0.1/arpack_combined_all-0.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.sourceforge.javacsv:javacsv:2.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/sourceforge/javacsv/javacsv/2.0/javacsv-2.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/sourceforge/javacsv/javacsv/2.0/javacsv-2.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/net/sourceforge/javacsv/javacsv/2.0/javacsv-2.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.antlr:antlr4-runtime:4.7">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/antlr/antlr4-runtime/4.7/antlr4-runtime-4.7.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/antlr/antlr4-runtime/4.7/antlr4-runtime-4.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/antlr/antlr4-runtime/4.7/antlr4-runtime-4.7-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.ant:ant:1.9.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/ant/ant/1.9.0/ant-1.9.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/ant/ant/1.9.0/ant-1.9.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/ant/ant/1.9.0/ant-1.9.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.ant:ant-launcher:1.9.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/ant/ant-launcher/1.9.0/ant-launcher-1.9.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/ant/ant-launcher/1.9.0/ant-launcher-1.9.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/ant/ant-launcher/1.9.0/ant-launcher-1.9.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.arrow:arrow-format:0.8.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/arrow/arrow-format/0.8.0/arrow-format-0.8.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/arrow/arrow-format/0.8.0/arrow-format-0.8.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/arrow/arrow-format/0.8.0/arrow-format-0.8.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.arrow:arrow-memory:0.8.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/arrow/arrow-memory/0.8.0/arrow-memory-0.8.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/arrow/arrow-memory/0.8.0/arrow-memory-0.8.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/arrow/arrow-memory/0.8.0/arrow-memory-0.8.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.arrow:arrow-vector:0.8.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/arrow/arrow-vector/0.8.0/arrow-vector-0.8.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/arrow/arrow-vector/0.8.0/arrow-vector-0.8.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/arrow/arrow-vector/0.8.0/arrow-vector-0.8.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.avro:avro:1.7.7">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/avro/avro/1.7.7/avro-1.7.7.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/avro/avro/1.7.7/avro-1.7.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/avro/avro/1.7.7/avro-1.7.7-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.avro:avro-ipc:1.7.7">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/avro/avro-ipc/1.7.7/avro-ipc-1.7.7.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/avro/avro-ipc/1.7.7/avro-ipc-1.7.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/avro/avro-ipc/1.7.7/avro-ipc-1.7.7-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.avro:avro-ipc:tests:1.7.7">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/avro/avro-ipc/1.7.7/avro-ipc-1.7.7-tests.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/avro/avro-ipc/1.7.7/avro-ipc-1.7.7-test-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/avro/avro-ipc/1.7.7/avro-ipc-1.7.7-test-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.avro:avro-mapred:hadoop2:1.7.7">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/avro/avro-mapred/1.7.7/avro-mapred-1.7.7-hadoop2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/avro/avro-mapred/1.7.7/avro-mapred-1.7.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/avro/avro-mapred/1.7.7/avro-mapred-1.7.7-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.commons:commons-compress:1.4.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/commons/commons-compress/1.4.1/commons-compress-1.4.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/commons/commons-compress/1.4.1/commons-compress-1.4.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/commons/commons-compress/1.4.1/commons-compress-1.4.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.commons:commons-crypto:1.0.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/commons/commons-crypto/1.0.0/commons-crypto-1.0.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/commons/commons-crypto/1.0.0/commons-crypto-1.0.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/commons/commons-crypto/1.0.0/commons-crypto-1.0.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.commons:commons-lang3:3.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.commons:commons-math3:3.4.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/commons/commons-math3/3.4.1/commons-math3-3.4.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/commons/commons-math3/3.4.1/commons-math3-3.4.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/commons/commons-math3/3.4.1/commons-math3-3.4.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.curator:curator-client:2.6.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/curator/curator-client/2.6.0/curator-client-2.6.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/curator/curator-client/2.6.0/curator-client-2.6.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/curator/curator-client/2.6.0/curator-client-2.6.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.curator:curator-framework:2.6.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/curator/curator-framework/2.6.0/curator-framework-2.6.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/curator/curator-framework/2.6.0/curator-framework-2.6.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/curator/curator-framework/2.6.0/curator-framework-2.6.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.curator:curator-recipes:2.6.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/curator/curator-recipes/2.6.0/curator-recipes-2.6.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/curator/curator-recipes/2.6.0/curator-recipes-2.6.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/curator/curator-recipes/2.6.0/curator-recipes-2.6.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.directory.api:api-asn1-api:1.0.0-M20">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/directory/api/api-asn1-api/1.0.0-M20/api-asn1-api-1.0.0-M20.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/directory/api/api-asn1-api/1.0.0-M20/api-asn1-api-1.0.0-M20-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/directory/api/api-asn1-api/1.0.0-M20/api-asn1-api-1.0.0-M20-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.directory.api:api-util:1.0.0-M20">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/directory/api/api-util/1.0.0-M20/api-util-1.0.0-M20.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/directory/api/api-util/1.0.0-M20/api-util-1.0.0-M20-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/directory/api/api-util/1.0.0-M20/api-util-1.0.0-M20-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.directory.server:apacheds-i18n:2.0.0-M15">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/directory/server/apacheds-i18n/2.0.0-M15/apacheds-i18n-2.0.0-M15.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/directory/server/apacheds-i18n/2.0.0-M15/apacheds-i18n-2.0.0-M15-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/directory/server/apacheds-i18n/2.0.0-M15/apacheds-i18n-2.0.0-M15-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.directory.server:apacheds-kerberos-codec:2.0.0-M15">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/directory/server/apacheds-kerberos-codec/2.0.0-M15/apacheds-kerberos-codec-2.0.0-M15.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/directory/server/apacheds-kerberos-codec/2.0.0-M15/apacheds-kerberos-codec-2.0.0-M15-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/directory/server/apacheds-kerberos-codec/2.0.0-M15/apacheds-kerberos-codec-2.0.0-M15-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.hadoop:hadoop-annotations:2.6.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-annotations/2.6.5/hadoop-annotations-2.6.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-annotations/2.6.5/hadoop-annotations-2.6.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-annotations/2.6.5/hadoop-annotations-2.6.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.hadoop:hadoop-auth:2.6.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-auth/2.6.5/hadoop-auth-2.6.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-auth/2.6.5/hadoop-auth-2.6.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-auth/2.6.5/hadoop-auth-2.6.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.hadoop:hadoop-client:2.6.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-client/2.6.5/hadoop-client-2.6.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-client/2.6.5/hadoop-client-2.6.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-client/2.6.5/hadoop-client-2.6.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.hadoop:hadoop-common:2.6.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-common/2.6.5/hadoop-common-2.6.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-common/2.6.5/hadoop-common-2.6.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-common/2.6.5/hadoop-common-2.6.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.hadoop:hadoop-hdfs:2.6.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-hdfs/2.6.5/hadoop-hdfs-2.6.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-hdfs/2.6.5/hadoop-hdfs-2.6.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-hdfs/2.6.5/hadoop-hdfs-2.6.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.hadoop:hadoop-mapreduce-client-app:2.6.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-mapreduce-client-app/2.6.5/hadoop-mapreduce-client-app-2.6.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-mapreduce-client-app/2.6.5/hadoop-mapreduce-client-app-2.6.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-mapreduce-client-app/2.6.5/hadoop-mapreduce-client-app-2.6.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.hadoop:hadoop-mapreduce-client-common:2.6.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-mapreduce-client-common/2.6.5/hadoop-mapreduce-client-common-2.6.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-mapreduce-client-common/2.6.5/hadoop-mapreduce-client-common-2.6.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-mapreduce-client-common/2.6.5/hadoop-mapreduce-client-common-2.6.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.hadoop:hadoop-mapreduce-client-core:2.6.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-mapreduce-client-core/2.6.5/hadoop-mapreduce-client-core-2.6.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-mapreduce-client-core/2.6.5/hadoop-mapreduce-client-core-2.6.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-mapreduce-client-core/2.6.5/hadoop-mapreduce-client-core-2.6.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.hadoop:hadoop-mapreduce-client-jobclient:2.6.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-mapreduce-client-jobclient/2.6.5/hadoop-mapreduce-client-jobclient-2.6.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-mapreduce-client-jobclient/2.6.5/hadoop-mapreduce-client-jobclient-2.6.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-mapreduce-client-jobclient/2.6.5/hadoop-mapreduce-client-jobclient-2.6.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.hadoop:hadoop-mapreduce-client-shuffle:2.6.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-mapreduce-client-shuffle/2.6.5/hadoop-mapreduce-client-shuffle-2.6.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-mapreduce-client-shuffle/2.6.5/hadoop-mapreduce-client-shuffle-2.6.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-mapreduce-client-shuffle/2.6.5/hadoop-mapreduce-client-shuffle-2.6.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.hadoop:hadoop-yarn-api:2.6.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-yarn-api/2.6.5/hadoop-yarn-api-2.6.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-yarn-api/2.6.5/hadoop-yarn-api-2.6.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-yarn-api/2.6.5/hadoop-yarn-api-2.6.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.hadoop:hadoop-yarn-client:2.6.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-yarn-client/2.6.5/hadoop-yarn-client-2.6.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-yarn-client/2.6.5/hadoop-yarn-client-2.6.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-yarn-client/2.6.5/hadoop-yarn-client-2.6.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.hadoop:hadoop-yarn-common:2.6.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-yarn-common/2.6.5/hadoop-yarn-common-2.6.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-yarn-common/2.6.5/hadoop-yarn-common-2.6.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-yarn-common/2.6.5/hadoop-yarn-common-2.6.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.hadoop:hadoop-yarn-server-common:2.6.5">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-yarn-server-common/2.6.5/hadoop-yarn-server-common-2.6.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-yarn-server-common/2.6.5/hadoop-yarn-server-common-2.6.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/hadoop/hadoop-yarn-server-common/2.6.5/hadoop-yarn-server-common-2.6.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.httpcomponents:httpclient:4.5.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/httpcomponents/httpclient/4.5.2/httpclient-4.5.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/httpcomponents/httpclient/4.5.2/httpclient-4.5.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/httpcomponents/httpclient/4.5.2/httpclient-4.5.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.httpcomponents:httpcore:4.4.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/httpcomponents/httpcore/4.4.1/httpcore-4.4.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/httpcomponents/httpcore/4.4.1/httpcore-4.4.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/httpcomponents/httpcore/4.4.1/httpcore-4.4.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.ivy:ivy:2.4.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/ivy/ivy/2.4.0/ivy-2.4.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/ivy/ivy/2.4.0/ivy-2.4.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/ivy/ivy/2.4.0/ivy-2.4.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.kafka:kafka-clients:0.10.0.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/kafka/kafka-clients/0.10.0.1/kafka-clients-0.10.0.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/kafka/kafka-clients/0.10.0.1/kafka-clients-0.10.0.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/kafka/kafka-clients/0.10.0.1/kafka-clients-0.10.0.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.logging.log4j:log4j-api:2.12.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.logging.log4j:log4j-core:2.12.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/logging/log4j/log4j-core/2.12.1/log4j-core-2.12.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/logging/log4j/log4j-core/2.12.1/log4j-core-2.12.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/logging/log4j/log4j-core/2.12.1/log4j-core-2.12.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.orc:orc-core:nohive:1.4.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/orc/orc-core/1.4.1/orc-core-1.4.1-nohive.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/orc/orc-core/1.4.1/orc-core-1.4.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/orc/orc-core/1.4.1/orc-core-1.4.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.orc:orc-mapreduce:nohive:1.4.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/orc/orc-mapreduce/1.4.1/orc-mapreduce-1.4.1-nohive.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/orc/orc-mapreduce/1.4.1/orc-mapreduce-1.4.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/orc/orc-mapreduce/1.4.1/orc-mapreduce-1.4.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.parquet:parquet-column:1.8.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/parquet/parquet-column/1.8.2/parquet-column-1.8.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/parquet/parquet-column/1.8.2/parquet-column-1.8.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/parquet/parquet-column/1.8.2/parquet-column-1.8.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.parquet:parquet-common:1.8.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/parquet/parquet-common/1.8.2/parquet-common-1.8.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/parquet/parquet-common/1.8.2/parquet-common-1.8.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/parquet/parquet-common/1.8.2/parquet-common-1.8.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.parquet:parquet-encoding:1.8.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/parquet/parquet-encoding/1.8.2/parquet-encoding-1.8.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/parquet/parquet-encoding/1.8.2/parquet-encoding-1.8.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/parquet/parquet-encoding/1.8.2/parquet-encoding-1.8.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.parquet:parquet-format:2.3.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/parquet/parquet-format/2.3.1/parquet-format-2.3.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/parquet/parquet-format/2.3.1/parquet-format-2.3.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/parquet/parquet-format/2.3.1/parquet-format-2.3.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.parquet:parquet-hadoop:1.8.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/parquet/parquet-hadoop/1.8.2/parquet-hadoop-1.8.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/parquet/parquet-hadoop/1.8.2/parquet-hadoop-1.8.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/parquet/parquet-hadoop/1.8.2/parquet-hadoop-1.8.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.parquet:parquet-jackson:1.8.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/parquet/parquet-jackson/1.8.2/parquet-jackson-1.8.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/parquet/parquet-jackson/1.8.2/parquet-jackson-1.8.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/parquet/parquet-jackson/1.8.2/parquet-jackson-1.8.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.spark:spark-catalyst_2.11:2.3.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-catalyst_2.11/2.3.0/spark-catalyst_2.11-2.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-catalyst_2.11/2.3.0/spark-catalyst_2.11-2.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-catalyst_2.11/2.3.0/spark-catalyst_2.11-2.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.spark:spark-core_2.11:2.3.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-core_2.11/2.3.0/spark-core_2.11-2.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-core_2.11/2.3.0/spark-core_2.11-2.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-core_2.11/2.3.0/spark-core_2.11-2.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.spark:spark-graphx_2.11:2.3.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-graphx_2.11/2.3.0/spark-graphx_2.11-2.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-graphx_2.11/2.3.0/spark-graphx_2.11-2.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-graphx_2.11/2.3.0/spark-graphx_2.11-2.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.spark:spark-kvstore_2.11:2.3.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-kvstore_2.11/2.3.0/spark-kvstore_2.11-2.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-kvstore_2.11/2.3.0/spark-kvstore_2.11-2.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-kvstore_2.11/2.3.0/spark-kvstore_2.11-2.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.spark:spark-launcher_2.11:2.3.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-launcher_2.11/2.3.0/spark-launcher_2.11-2.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-launcher_2.11/2.3.0/spark-launcher_2.11-2.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-launcher_2.11/2.3.0/spark-launcher_2.11-2.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.spark:spark-mllib_2.11:2.3.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-mllib_2.11/2.3.0/spark-mllib_2.11-2.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-mllib_2.11/2.3.0/spark-mllib_2.11-2.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-mllib_2.11/2.3.0/spark-mllib_2.11-2.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.spark:spark-mllib-local_2.11:2.3.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-mllib-local_2.11/2.3.0/spark-mllib-local_2.11-2.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-mllib-local_2.11/2.3.0/spark-mllib-local_2.11-2.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-mllib-local_2.11/2.3.0/spark-mllib-local_2.11-2.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.spark:spark-network-common_2.11:2.3.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-network-common_2.11/2.3.0/spark-network-common_2.11-2.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-network-common_2.11/2.3.0/spark-network-common_2.11-2.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-network-common_2.11/2.3.0/spark-network-common_2.11-2.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.spark:spark-network-shuffle_2.11:2.3.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-network-shuffle_2.11/2.3.0/spark-network-shuffle_2.11-2.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-network-shuffle_2.11/2.3.0/spark-network-shuffle_2.11-2.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-network-shuffle_2.11/2.3.0/spark-network-shuffle_2.11-2.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.spark:spark-sketch_2.11:2.3.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-sketch_2.11/2.3.0/spark-sketch_2.11-2.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-sketch_2.11/2.3.0/spark-sketch_2.11-2.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-sketch_2.11/2.3.0/spark-sketch_2.11-2.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.spark:spark-sql_2.11:2.3.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-sql_2.11/2.3.0/spark-sql_2.11-2.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-sql_2.11/2.3.0/spark-sql_2.11-2.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-sql_2.11/2.3.0/spark-sql_2.11-2.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.spark:spark-sql-kafka-0-10_2.11:2.3.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-sql-kafka-0-10_2.11/2.3.0/spark-sql-kafka-0-10_2.11-2.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-sql-kafka-0-10_2.11/2.3.0/spark-sql-kafka-0-10_2.11-2.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-sql-kafka-0-10_2.11/2.3.0/spark-sql-kafka-0-10_2.11-2.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.spark:spark-streaming_2.11:2.3.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-streaming_2.11/2.3.0/spark-streaming_2.11-2.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-streaming_2.11/2.3.0/spark-streaming_2.11-2.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-streaming_2.11/2.3.0/spark-streaming_2.11-2.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.spark:spark-streaming-kafka-0-10_2.11:2.3.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-streaming-kafka-0-10_2.11/2.3.0/spark-streaming-kafka-0-10_2.11-2.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-streaming-kafka-0-10_2.11/2.3.0/spark-streaming-kafka-0-10_2.11-2.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-streaming-kafka-0-10_2.11/2.3.0/spark-streaming-kafka-0-10_2.11-2.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.spark:spark-tags_2.11:2.3.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-tags_2.11/2.3.0/spark-tags_2.11-2.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-tags_2.11/2.3.0/spark-tags_2.11-2.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-tags_2.11/2.3.0/spark-tags_2.11-2.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.spark:spark-unsafe_2.11:2.3.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-unsafe_2.11/2.3.0/spark-unsafe_2.11-2.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-unsafe_2.11/2.3.0/spark-unsafe_2.11-2.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/spark/spark-unsafe_2.11/2.3.0/spark-unsafe_2.11-2.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.xbean:xbean-asm5-shaded:4.4">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/xbean/xbean-asm5-shaded/4.4/xbean-asm5-shaded-4.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/xbean/xbean-asm5-shaded/4.4/xbean-asm5-shaded-4.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/xbean/xbean-asm5-shaded/4.4/xbean-asm5-shaded-4.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.zeppelin:spark-interpreter:0.8.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/zeppelin/spark-interpreter/0.8.1/spark-interpreter-0.8.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/zeppelin/spark-interpreter/0.8.1/spark-interpreter-0.8.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/zeppelin/spark-interpreter/0.8.1/spark-interpreter-0.8.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.zookeeper:zookeeper:3.4.6">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/zookeeper/zookeeper/3.4.6/zookeeper-3.4.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/zookeeper/zookeeper/3.4.6/zookeeper-3.4.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/apache/zookeeper/zookeeper/3.4.6/zookeeper-3.4.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.aspectj:aspectjrt:1.8.9">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/aspectj/aspectjrt/1.8.9/aspectjrt-1.8.9.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/aspectj/aspectjrt/1.8.9/aspectjrt-1.8.9-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/aspectj/aspectjrt/1.8.9/aspectjrt-1.8.9-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.bouncycastle:bcprov-jdk15on:1.52">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/bouncycastle/bcprov-jdk15on/1.52/bcprov-jdk15on-1.52.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/bouncycastle/bcprov-jdk15on/1.52/bcprov-jdk15on-1.52-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/bouncycastle/bcprov-jdk15on/1.52/bcprov-jdk15on-1.52-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.codehaus.jackson:jackson-core-asl:1.9.13">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.codehaus.jackson:jackson-jaxrs:1.9.13">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/codehaus/jackson/jackson-jaxrs/1.9.13/jackson-jaxrs-1.9.13.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/codehaus/jackson/jackson-jaxrs/1.9.13/jackson-jaxrs-1.9.13-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/codehaus/jackson/jackson-jaxrs/1.9.13/jackson-jaxrs-1.9.13-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.codehaus.jackson:jackson-mapper-asl:1.9.13">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.codehaus.jackson:jackson-xc:1.9.13">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/codehaus/jackson/jackson-xc/1.9.13/jackson-xc-1.9.13.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/codehaus/jackson/jackson-xc/1.9.13/jackson-xc-1.9.13-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/codehaus/jackson/jackson-xc/1.9.13/jackson-xc-1.9.13-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.codehaus.janino:commons-compiler:3.0.8">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/codehaus/janino/commons-compiler/3.0.8/commons-compiler-3.0.8.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/codehaus/janino/commons-compiler/3.0.8/commons-compiler-3.0.8-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/codehaus/janino/commons-compiler/3.0.8/commons-compiler-3.0.8-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.codehaus.janino:janino:3.0.8">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/codehaus/janino/janino/3.0.8/janino-3.0.8.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/codehaus/janino/janino/3.0.8/janino-3.0.8-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/codehaus/janino/janino/3.0.8/janino-3.0.8-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.fusesource.leveldbjni:leveldbjni-all:1.8">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/fusesource/leveldbjni/leveldbjni-all/1.8/leveldbjni-all-1.8.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/fusesource/leveldbjni/leveldbjni-all/1.8/leveldbjni-all-1.8-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/fusesource/leveldbjni/leveldbjni-all/1.8/leveldbjni-all-1.8-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.glassfish.hk2.external:aopalliance-repackaged:2.4.0-b34">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/hk2/external/aopalliance-repackaged/2.4.0-b34/aopalliance-repackaged-2.4.0-b34.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/hk2/external/aopalliance-repackaged/2.4.0-b34/aopalliance-repackaged-2.4.0-b34-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/hk2/external/aopalliance-repackaged/2.4.0-b34/aopalliance-repackaged-2.4.0-b34-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.glassfish.hk2.external:javax.inject:2.4.0-b34">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/hk2/external/javax.inject/2.4.0-b34/javax.inject-2.4.0-b34.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/hk2/external/javax.inject/2.4.0-b34/javax.inject-2.4.0-b34-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/hk2/external/javax.inject/2.4.0-b34/javax.inject-2.4.0-b34-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.glassfish.hk2:hk2-api:2.4.0-b34">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/hk2/hk2-api/2.4.0-b34/hk2-api-2.4.0-b34.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/hk2/hk2-api/2.4.0-b34/hk2-api-2.4.0-b34-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/hk2/hk2-api/2.4.0-b34/hk2-api-2.4.0-b34-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.glassfish.hk2:hk2-locator:2.4.0-b34">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/hk2/hk2-locator/2.4.0-b34/hk2-locator-2.4.0-b34.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/hk2/hk2-locator/2.4.0-b34/hk2-locator-2.4.0-b34-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/hk2/hk2-locator/2.4.0-b34/hk2-locator-2.4.0-b34-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.glassfish.hk2:hk2-utils:2.4.0-b34">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/hk2/hk2-utils/2.4.0-b34/hk2-utils-2.4.0-b34.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/hk2/hk2-utils/2.4.0-b34/hk2-utils-2.4.0-b34-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/hk2/hk2-utils/2.4.0-b34/hk2-utils-2.4.0-b34-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.glassfish.hk2:osgi-resource-locator:1.0.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/hk2/osgi-resource-locator/1.0.1/osgi-resource-locator-1.0.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/hk2/osgi-resource-locator/1.0.1/osgi-resource-locator-1.0.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/hk2/osgi-resource-locator/1.0.1/osgi-resource-locator-1.0.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.glassfish.jersey.bundles.repackaged:jersey-guava:2.22.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/bundles/repackaged/jersey-guava/2.22.2/jersey-guava-2.22.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/bundles/repackaged/jersey-guava/2.22.2/jersey-guava-2.22.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/bundles/repackaged/jersey-guava/2.22.2/jersey-guava-2.22.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.glassfish.jersey.containers:jersey-container-servlet:2.22.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/containers/jersey-container-servlet/2.22.2/jersey-container-servlet-2.22.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/containers/jersey-container-servlet/2.22.2/jersey-container-servlet-2.22.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/containers/jersey-container-servlet/2.22.2/jersey-container-servlet-2.22.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.glassfish.jersey.containers:jersey-container-servlet-core:2.22.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.22.2/jersey-container-servlet-core-2.22.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.22.2/jersey-container-servlet-core-2.22.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.22.2/jersey-container-servlet-core-2.22.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.glassfish.jersey.core:jersey-client:2.22.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/core/jersey-client/2.22.2/jersey-client-2.22.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/core/jersey-client/2.22.2/jersey-client-2.22.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/core/jersey-client/2.22.2/jersey-client-2.22.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.glassfish.jersey.core:jersey-common:2.22.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/core/jersey-common/2.22.2/jersey-common-2.22.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/core/jersey-common/2.22.2/jersey-common-2.22.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/core/jersey-common/2.22.2/jersey-common-2.22.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.glassfish.jersey.core:jersey-server:2.22.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/core/jersey-server/2.22.2/jersey-server-2.22.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/core/jersey-server/2.22.2/jersey-server-2.22.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/core/jersey-server/2.22.2/jersey-server-2.22.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.glassfish.jersey.media:jersey-media-jaxb:2.22.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/media/jersey-media-jaxb/2.22.2/jersey-media-jaxb-2.22.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/media/jersey-media-jaxb/2.22.2/jersey-media-jaxb-2.22.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/glassfish/jersey/media/jersey-media-jaxb/2.22.2/jersey-media-jaxb-2.22.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.htrace:htrace-core:3.0.4">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/htrace/htrace-core/3.0.4/htrace-core-3.0.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/htrace/htrace-core/3.0.4/htrace-core-3.0.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/htrace/htrace-core/3.0.4/htrace-core-3.0.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.javassist:javassist:3.18.1-GA">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/javassist/javassist/3.18.1-GA/javassist-3.18.1-GA.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/javassist/javassist/3.18.1-GA/javassist-3.18.1-GA-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/javassist/javassist/3.18.1-GA/javassist-3.18.1-GA-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.jdom:jdom:1.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/jdom/jdom/1.1/jdom-1.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/jdom/jdom/1.1/jdom-1.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/jdom/jdom/1.1/jdom-1.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.json4s:json4s-ast_2.11:3.2.11">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/json4s/json4s-ast_2.11/3.2.11/json4s-ast_2.11-3.2.11.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/json4s/json4s-ast_2.11/3.2.11/json4s-ast_2.11-3.2.11-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/json4s/json4s-ast_2.11/3.2.11/json4s-ast_2.11-3.2.11-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.json4s:json4s-core_2.11:3.2.11">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/json4s/json4s-core_2.11/3.2.11/json4s-core_2.11-3.2.11.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/json4s/json4s-core_2.11/3.2.11/json4s-core_2.11-3.2.11-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/json4s/json4s-core_2.11/3.2.11/json4s-core_2.11-3.2.11-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.json4s:json4s-jackson_2.11:3.2.11">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/json4s/json4s-jackson_2.11/3.2.11/json4s-jackson_2.11-3.2.11.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/json4s/json4s-jackson_2.11/3.2.11/json4s-jackson_2.11-3.2.11-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/json4s/json4s-jackson_2.11/3.2.11/json4s-jackson_2.11-3.2.11-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.json4s:json4s-native_2.11:3.2.11">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/json4s/json4s-native_2.11/3.2.11/json4s-native_2.11-3.2.11.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/json4s/json4s-native_2.11/3.2.11/json4s-native_2.11-3.2.11-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/json4s/json4s-native_2.11/3.2.11/json4s-native_2.11-3.2.11-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.lz4:lz4-java:1.4.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/lz4/lz4-java/1.4.0/lz4-java-1.4.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/lz4/lz4-java/1.4.0/lz4-java-1.4.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/lz4/lz4-java/1.4.0/lz4-java-1.4.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.mortbay.jetty:jetty-util:6.1.26">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/mortbay/jetty/jetty-util/6.1.26/jetty-util-6.1.26.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/mortbay/jetty/jetty-util/6.1.26/jetty-util-6.1.26-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/mortbay/jetty/jetty-util/6.1.26/jetty-util-6.1.26-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.objenesis:objenesis:2.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/objenesis/objenesis/2.1/objenesis-2.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/objenesis/objenesis/2.1/objenesis-2.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/objenesis/objenesis/2.1/objenesis-2.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.roaringbitmap:RoaringBitmap:0.5.11">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/roaringbitmap/RoaringBitmap/0.5.11/RoaringBitmap-0.5.11.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/roaringbitmap/RoaringBitmap/0.5.11/RoaringBitmap-0.5.11-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/roaringbitmap/RoaringBitmap/0.5.11/RoaringBitmap-0.5.11-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.scala-lang.modules:scala-parser-combinators_2.11:1.0.4">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scala-lang/modules/scala-parser-combinators_2.11/1.0.4/scala-parser-combinators_2.11-1.0.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scala-lang/modules/scala-parser-combinators_2.11/1.0.4/scala-parser-combinators_2.11-1.0.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scala-lang/modules/scala-parser-combinators_2.11/1.0.4/scala-parser-combinators_2.11-1.0.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.scala-lang:scala-actors:2.11.8">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scala-lang/scala-actors/2.11.8/scala-actors-2.11.8.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scala-lang/scala-actors/2.11.8/scala-actors-2.11.8-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scala-lang/scala-actors/2.11.8/scala-actors-2.11.8-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.scala-lang:scala-library:2.11.8" type="Scala">
<properties>
<language-level>Scala_2_11</language-level>
<compiler-classpath>
<root url="file://$PROJECT_DIR$/../../../../../repository/org/scala-lang/scala-compiler/2.11.8/scala-compiler-2.11.8.jar" />
<root url="file://$PROJECT_DIR$/../../../../../repository/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8.jar" />
<root url="file://$PROJECT_DIR$/../../../../../repository/org/scala-lang/scala-reflect/2.11.8/scala-reflect-2.11.8.jar" />
</compiler-classpath>
</properties>
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.scala-lang:scala-reflect:2.11.8">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scala-lang/scala-reflect/2.11.8/scala-reflect-2.11.8.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scala-lang/scala-reflect/2.11.8/scala-reflect-2.11.8-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scala-lang/scala-reflect/2.11.8/scala-reflect-2.11.8-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.scala-lang:scala-xml:2.11.0-M4">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scala-lang/scala-xml/2.11.0-M4/scala-xml-2.11.0-M4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scala-lang/scala-xml/2.11.0-M4/scala-xml-2.11.0-M4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scala-lang/scala-xml/2.11.0-M4/scala-xml-2.11.0-M4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.scalanlp:breeze_2.11:0.13.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scalanlp/breeze_2.11/0.13.2/breeze_2.11-0.13.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scalanlp/breeze_2.11/0.13.2/breeze_2.11-0.13.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scalanlp/breeze_2.11/0.13.2/breeze_2.11-0.13.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.scalanlp:breeze-macros_2.11:0.13.2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scalanlp/breeze-macros_2.11/0.13.2/breeze-macros_2.11-0.13.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scalanlp/breeze-macros_2.11/0.13.2/breeze-macros_2.11-0.13.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/scalanlp/breeze-macros_2.11/0.13.2/breeze-macros_2.11-0.13.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.slf4j:jcl-over-slf4j:1.7.16">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/slf4j/jcl-over-slf4j/1.7.16/jcl-over-slf4j-1.7.16.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/slf4j/jcl-over-slf4j/1.7.16/jcl-over-slf4j-1.7.16-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/slf4j/jcl-over-slf4j/1.7.16/jcl-over-slf4j-1.7.16-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.slf4j:jul-to-slf4j:1.7.16">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/slf4j/jul-to-slf4j/1.7.16/jul-to-slf4j-1.7.16.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/slf4j/jul-to-slf4j/1.7.16/jul-to-slf4j-1.7.16-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/slf4j/jul-to-slf4j/1.7.16/jul-to-slf4j-1.7.16-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.slf4j:slf4j-api:1.7.16">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/slf4j/slf4j-api/1.7.16/slf4j-api-1.7.16.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/slf4j/slf4j-api/1.7.16/slf4j-api-1.7.16-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/slf4j/slf4j-api/1.7.16/slf4j-api-1.7.16-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.slf4j:slf4j-log4j12:1.7.16">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/slf4j/slf4j-log4j12/1.7.16/slf4j-log4j12-1.7.16.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/slf4j/slf4j-log4j12/1.7.16/slf4j-log4j12-1.7.16-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/slf4j/slf4j-log4j12/1.7.16/slf4j-log4j12-1.7.16-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.spark-project.spark:unused:1.0.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/spark-project/spark/unused/1.0.0/unused-1.0.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/spark-project/spark/unused/1.0.0/unused-1.0.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/spark-project/spark/unused/1.0.0/unused-1.0.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.spire-math:spire_2.11:0.13.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/spire-math/spire_2.11/0.13.0/spire_2.11-0.13.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/spire-math/spire_2.11/0.13.0/spire_2.11-0.13.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/spire-math/spire_2.11/0.13.0/spire_2.11-0.13.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.spire-math:spire-macros_2.11:0.13.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/spire-math/spire-macros_2.11/0.13.0/spire-macros_2.11-0.13.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/spire-math/spire-macros_2.11/0.13.0/spire-macros_2.11-0.13.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/spire-math/spire-macros_2.11/0.13.0/spire-macros_2.11-0.13.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.tukaani:xz:1.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/tukaani/xz/1.0/xz-1.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/tukaani/xz/1.0/xz-1.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/tukaani/xz/1.0/xz-1.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.typelevel:machinist_2.11:0.6.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/typelevel/machinist_2.11/0.6.1/machinist_2.11-0.6.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/typelevel/machinist_2.11/0.6.1/machinist_2.11-0.6.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/typelevel/machinist_2.11/0.6.1/machinist_2.11-0.6.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.typelevel:macro-compat_2.11:1.1.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/typelevel/macro-compat_2.11/1.1.1/macro-compat_2.11-1.1.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/typelevel/macro-compat_2.11/1.1.1/macro-compat_2.11-1.1.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/typelevel/macro-compat_2.11/1.1.1/macro-compat_2.11-1.1.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.xerial.snappy:snappy-java:1.1.2.6">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/xerial/snappy/snappy-java/1.1.2.6/snappy-java-1.1.2.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/xerial/snappy/snappy-java/1.1.2.6/snappy-java-1.1.2.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/org/xerial/snappy/snappy-java/1.1.2.6/snappy-java-1.1.2.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: oro:oro:2.0.8">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/oro/oro/2.0.8/oro-2.0.8.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/oro/oro/2.0.8/oro-2.0.8-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/oro/oro/2.0.8/oro-2.0.8-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: xerces:xercesImpl:2.9.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/xerces/xercesImpl/2.9.1/xercesImpl-2.9.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/xerces/xercesImpl/2.9.1/xercesImpl-2.9.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: xml-apis:xml-apis:1.3.04">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/xml-apis/xml-apis/1.3.04/xml-apis-1.3.04.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/xml-apis/xml-apis/1.3.04/xml-apis-1.3.04-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/xml-apis/xml-apis/1.3.04/xml-apis-1.3.04-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: xmlenc:xmlenc:0.52">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/xmlenc/xmlenc/0.52/xmlenc-0.52.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../../../repository/xmlenc/xmlenc/0.52/xmlenc-0.52-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../../../repository/xmlenc/xmlenc/0.52/xmlenc-0.52-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/spark-2.x.iml" filepath="$PROJECT_DIR$/.idea/spark-2.x.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ScalaCompilerConfiguration">
<profile name="Maven 1" modules="spark-2.x" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/scala" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="scala-sdk-2.11.12" level="application" />
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="file://$MODULE_DIR$/../../spark-2.3.0-odps0.33.0/jars" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="file://$MODULE_DIR$/../../spark-2.3.0-odps0.33.0/jars" />
</SOURCES>
<jarDirectory url="file://$MODULE_DIR$/../../spark-2.3.0-odps0.33.0/jars" recursive="false" />
<jarDirectory url="file://$MODULE_DIR$/../../spark-2.3.0-odps0.33.0/jars" recursive="false" type="SOURCES" />
</library>
</orderEntry>
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.spark:spark-core_2.11:2.3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.avro:avro:1.7.7" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.jackson:jackson-core-asl:1.9.13" level="project" />
<orderEntry type="library" name="Maven: com.thoughtworks.paranamer:paranamer:2.3" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.commons:commons-compress:1.4.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.tukaani:xz:1.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.avro:avro-mapred:hadoop2:1.7.7" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.avro:avro-ipc:1.7.7" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.avro:avro-ipc:tests:1.7.7" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.twitter:chill_2.11:0.8.4" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.esotericsoftware:kryo-shaded:3.0.3" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.esotericsoftware:minlog:1.3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.objenesis:objenesis:2.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.twitter:chill-java:0.8.4" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.xbean:xbean-asm5-shaded:4.4" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.hadoop:hadoop-client:2.6.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.hadoop:hadoop-common:2.6.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-cli:commons-cli:1.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: xmlenc:xmlenc:0.52" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-httpclient:commons-httpclient:3.1" level="project" />
<orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-configuration:commons-configuration:1.6" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-beanutils:commons-beanutils-core:1.8.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.hadoop:hadoop-auth:2.6.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.directory.server:apacheds-kerberos-codec:2.0.0-M15" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.directory.server:apacheds-i18n:2.0.0-M15" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.directory.api:api-asn1-api:1.0.0-M20" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.directory.api:api-util:1.0.0-M20" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.curator:curator-client:2.6.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.htrace:htrace-core:3.0.4" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.hadoop:hadoop-hdfs:2.6.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.mortbay.jetty:jetty-util:6.1.26" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: xerces:xercesImpl:2.9.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: xml-apis:xml-apis:1.3.04" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.hadoop:hadoop-mapreduce-client-app:2.6.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.hadoop:hadoop-mapreduce-client-common:2.6.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.hadoop:hadoop-yarn-client:2.6.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.hadoop:hadoop-yarn-server-common:2.6.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.hadoop:hadoop-mapreduce-client-shuffle:2.6.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.hadoop:hadoop-yarn-api:2.6.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.hadoop:hadoop-mapreduce-client-core:2.6.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.hadoop:hadoop-yarn-common:2.6.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.codehaus.jackson:jackson-jaxrs:1.9.13" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.codehaus.jackson:jackson-xc:1.9.13" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.hadoop:hadoop-mapreduce-client-jobclient:2.6.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.hadoop:hadoop-annotations:2.6.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.spark:spark-launcher_2.11:2.3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.spark:spark-kvstore_2.11:2.3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.fusesource.leveldbjni:leveldbjni-all:1.8" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.fasterxml.jackson.core:jackson-core:2.6.7" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.6.7" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.spark:spark-network-common_2.11:2.3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.spark:spark-network-shuffle_2.11:2.3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.spark:spark-unsafe_2.11:2.3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.dev.jets3t:jets3t:0.9.4" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.activation:activation:1.1.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bouncycastle:bcprov-jdk15on:1.52" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.jamesmurty.utils:java-xmlbuilder:1.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.iharder:base64:2.3.8" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.curator:curator-recipes:2.6.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.curator:curator-framework:2.6.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.zookeeper:zookeeper:3.4.6" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.servlet:javax.servlet-api:3.1.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.commons:commons-math3:3.4.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.findbugs:jsr305:1.3.9" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.16" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.slf4j:jul-to-slf4j:1.7.16" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.slf4j:jcl-over-slf4j:1.7.16" level="project" />
<orderEntry type="library" name="Maven: log4j:log4j:1.2.17" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-log4j12:1.7.16" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.ning:compress-lzf:1.0.3" level="project" />
<orderEntry type="library" name="Maven: org.xerial.snappy:snappy-java:1.1.2.6" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.lz4:lz4-java:1.4.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.luben:zstd-jni:1.3.2-2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.roaringbitmap:RoaringBitmap:0.5.11" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-net:commons-net:2.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.json4s:json4s-jackson_2.11:3.2.11" level="project" />
<orderEntry type="library" name="Maven: org.json4s:json4s-core_2.11:3.2.11" level="project" />
<orderEntry type="library" name="Maven: org.json4s:json4s-ast_2.11:3.2.11" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.glassfish.jersey.core:jersey-client:2.22.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.ws.rs:javax.ws.rs-api:2.0.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.glassfish.hk2:hk2-api:2.4.0-b34" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.glassfish.hk2:hk2-utils:2.4.0-b34" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.glassfish.hk2.external:aopalliance-repackaged:2.4.0-b34" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.glassfish.hk2.external:javax.inject:2.4.0-b34" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.glassfish.hk2:hk2-locator:2.4.0-b34" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.javassist:javassist:3.18.1-GA" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.glassfish.jersey.core:jersey-common:2.22.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.annotation:javax.annotation-api:1.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.glassfish.jersey.bundles.repackaged:jersey-guava:2.22.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.glassfish.hk2:osgi-resource-locator:1.0.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.glassfish.jersey.core:jersey-server:2.22.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.glassfish.jersey.media:jersey-media-jaxb:2.22.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.validation:validation-api:1.1.0.Final" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.glassfish.jersey.containers:jersey-container-servlet:2.22.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.glassfish.jersey.containers:jersey-container-servlet-core:2.22.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: io.netty:netty-all:4.1.17.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty:3.9.9.Final" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.clearspring.analytics:stream:2.7.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: io.dropwizard.metrics:metrics-core:3.1.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: io.dropwizard.metrics:metrics-jvm:3.1.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: io.dropwizard.metrics:metrics-json:3.1.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: io.dropwizard.metrics:metrics-graphite:3.1.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.6.7.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.fasterxml.jackson.module:jackson-module-scala_2.11:2.6.7.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.scala-lang:scala-reflect:2.11.8" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.fasterxml.jackson.module:jackson-module-paranamer:2.7.9" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.ivy:ivy:2.4.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: oro:oro:2.0.8" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.razorvine:pyrolite:4.13" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.sf.py4j:py4j:0.10.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.spark:spark-tags_2.11:2.3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.commons:commons-crypto:1.0.0" level="project" />
<orderEntry type="library" name="Maven: org.spark-project.spark:unused:1.0.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.spark:spark-sql_2.11:2.3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.univocity:univocity-parsers:2.5.9" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.spark:spark-sketch_2.11:2.3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.spark:spark-catalyst_2.11:2.3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.codehaus.janino:janino:3.0.8" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.codehaus.janino:commons-compiler:3.0.8" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.antlr:antlr4-runtime:4.7" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.orc:orc-core:nohive:1.4.1" level="project" />
<orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: io.airlift:aircompressor:0.8" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.orc:orc-mapreduce:nohive:1.4.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.parquet:parquet-column:1.8.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.parquet:parquet-common:1.8.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.parquet:parquet-encoding:1.8.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.parquet:parquet-hadoop:1.8.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.parquet:parquet-format:2.3.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.parquet:parquet-jackson:1.8.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.arrow:arrow-vector:0.8.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.arrow:arrow-format:0.8.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.arrow:arrow-memory:0.8.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: joda-time:joda-time:2.9.9" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.carrotsearch:hppc:0.7.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.vlkan:flatbuffers:1.2.0-3f79e055" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.spark:spark-mllib_2.11:2.3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.scala-lang.modules:scala-parser-combinators_2.11:1.0.4" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.spark:spark-graphx_2.11:2.3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.fommil.netlib:core:1.1.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.sourceforge.f2j:arpack_combined_all:0.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.spark:spark-mllib-local_2.11:2.3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.scalanlp:breeze_2.11:0.13.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.scalanlp:breeze-macros_2.11:0.13.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.sf.opencsv:opencsv:2.3" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.rwl:jtransforms:2.4.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spire-math:spire_2.11:0.13.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spire-math:spire-macros_2.11:0.13.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.typelevel:machinist_2.11:0.6.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.chuusai:shapeless_2.11:2.3.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.typelevel:macro-compat_2.11:1.1.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.spark:spark-streaming_2.11:2.3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.aliyun.odps:cupid-sdk:3.3.8-public" level="project" />
<orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.rholder:guava-retrying:2.0.0" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:14.0.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.aliyun.odps:odps-sdk-core:0.30.8-public" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.aliyun.odps:odps-sdk-commons:0.30.8-public" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.sourceforge.javacsv:javacsv:2.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.mail:mail:1.4.7" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.xml.bind:jaxb-api:2.2.7" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sun.xml.bind:jaxb-core:2.2.7" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sun.istack:istack-commons-runtime:2.16" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sun.xml.bind:jaxb-impl:2.2.7" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sun.xml.fastinfoset:FastInfoset:1.2.12" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.xml.bind:jsr173_api:1.0" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.2.4" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.2" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.10" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.ant:ant:1.9.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.ant:ant-launcher:1.9.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun.odps:hadoop-fs-oss:3.3.8-public" level="project" />
<orderEntry type="library" name="Maven: com.aliyun.oss:aliyun-sdk-oss:2.2.1" level="project" />
<orderEntry type="library" name="Maven: org.jdom:jdom:1.1" level="project" />
<orderEntry type="library" name="Maven: net.sf.json-lib:json-lib:jdk15:2.4" level="project" />
<orderEntry type="library" name="Maven: net.sf.ezmorph:ezmorph:1.0.6" level="project" />
<orderEntry type="library" name="Maven: org.aspectj:aspectjrt:1.8.9" level="project" />
<orderEntry type="library" name="Maven: com.aliyun.odps:odps-spark-datasource_2.11:3.3.8-public" level="project" />
<orderEntry type="library" name="Maven: com.aliyun.openservices:loghub-client-lib:0.6.3" level="project" />
<orderEntry type="library" name="Maven: org.scala-lang:scala-library:2.11.8" level="project" />
<orderEntry type="library" name="Maven: org.scala-lang:scala-actors:2.11.8" level="project" />
<orderEntry type="library" name="Maven: com.aliyun.emr:emr-datahub_2.11:1.6.0" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.45" level="project" />
<orderEntry type="library" name="Maven: com.101tec:zkclient:0.10" level="project" />
<orderEntry type="library" name="Maven: org.scala-lang:scala-xml:2.11.0-M4" level="project" />
<orderEntry type="library" name="Maven: com.aliyun.datahub:aliyun-sdk-datahub:2.9.4-public" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.jackson:jackson-mapper-asl:1.9.13" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.4" level="project" />
<orderEntry type="library" name="Maven: org.apache.spark:spark-streaming-kafka-0-10_2.11:2.3.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.kafka:kafka-clients:0.10.0.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.spark:spark-sql-kafka-0-10_2.11:2.3.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun.odps:streaming-lib:3.3.8-public" level="project" />
<orderEntry type="library" name="Maven: org.json4s:json4s-native_2.11:3.2.11" level="project" />
<orderEntry type="library" name="Maven: net.debasishg:redisclient_2.11:3.5" level="project" />
<orderEntry type="library" name="Maven: commons-pool:commons-pool:1.6" level="project" />
<orderEntry type="library" name="Maven: com.typesafe.akka:akka-actor_2.11:2.3.6" level="project" />
<orderEntry type="library" name="Maven: com.typesafe:config:1.2.1" level="project" />
<orderEntry type="library" name="Maven: com.aliyun.openservices:aliyun-log:0.6.15" level="project" />
<orderEntry type="library" name="Maven: commons-validator:commons-validator:1.4.0" level="project" />
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.8.3" level="project" />
<orderEntry type="library" name="Maven: commons-digester:commons-digester:1.8" level="project" />
<orderEntry type="library" name="Maven: com.aliyun.openservices:log-loghub-producer:0.1.11" level="project" />
<orderEntry type="library" name="Maven: org.apache.zeppelin:spark-interpreter:0.8.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.logging.log4j:log4j-core:2.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.logging.log4j:log4j-api:2.12.1" level="project" />
<orderEntry type="module-library">
<library name="Maven: jindofs:sdk:3.7.2">
<CLASSES>
<root url="jar://$MODULE_DIR$/libs/jindofs-sdk-3.7.2.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>
\ No newline at end of file
文件已添加
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 159056 bytes for Chunk::new
# Possible reasons:
# The system is out of physical RAM or swap space
# In 32 bit mode, the process size limit was hit
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap backing store is full
# Use 64 bit Java on a 64 bit OS
# Decrease Java heap size (-Xmx/-Xms)
# Decrease number of Java threads
# Decrease Java thread stack sizes (-Xss)
# Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
#
# Out of Memory Error (allocation.cpp:390), pid=136340, tid=200496
#
# JRE version: Java(TM) SE Runtime Environment (8.0_51-b16) (build 1.8.0_51-b16)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.51-b03 mixed mode windows-amd64 compressed oops)
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
--------------- T H R E A D ---------------
Current thread (0x00000000202ba800): JavaThread "C2 CompilerThread2" daemon [_thread_in_native, id=200496, stack(0x0000000020940000,0x0000000020a40000)]
Stack: [0x0000000020940000,0x0000000020a40000]
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [jvm.dll+0x32b4ca]
Current CompileTask:
C2: 3215 129 s 4 sun.misc.URLClassPath::getNextLoader (88 bytes)
--------------- P R O C E S S ---------------
Java Threads: ( => current thread )
0x0000000020352800 JavaThread "Service Thread" daemon [_thread_blocked, id=200520, stack(0x0000000020b40000,0x0000000020c40000)]
0x00000000202bd800 JavaThread "C1 CompilerThread3" daemon [_thread_blocked, id=200508, stack(0x0000000020a40000,0x0000000020b40000)]
=>0x00000000202ba800 JavaThread "C2 CompilerThread2" daemon [_thread_in_native, id=200496, stack(0x0000000020940000,0x0000000020a40000)]
0x00000000202ba000 JavaThread "C2 CompilerThread1" daemon [_thread_in_native, id=200504, stack(0x0000000020840000,0x0000000020940000)]
0x00000000202b9000 JavaThread "C2 CompilerThread0" daemon [_thread_in_native, id=200500, stack(0x0000000020740000,0x0000000020840000)]
0x000000001e70d000 JavaThread "JDWP Command Reader" daemon [_thread_in_native, id=198720, stack(0x000000001ee70000,0x000000001ef70000)]
0x000000001e70a800 JavaThread "JDWP Event Helper Thread" daemon [_thread_blocked, id=200360, stack(0x000000001ed70000,0x000000001ee70000)]
0x000000001e6ff800 JavaThread "JDWP Transport Listener: dt_socket" daemon [_thread_blocked, id=199312, stack(0x000000001ec70000,0x000000001ed70000)]
0x000000001e6f6000 JavaThread "Attach Listener" daemon [_thread_blocked, id=200336, stack(0x000000001eb70000,0x000000001ec70000)]
0x000000001e6f5800 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=200352, stack(0x000000001ea70000,0x000000001eb70000)]
0x0000000002c7d000 JavaThread "Finalizer" daemon [_thread_blocked, id=200344, stack(0x000000001e570000,0x000000001e670000)]
0x0000000002c75000 JavaThread "Reference Handler" daemon [_thread_blocked, id=200324, stack(0x000000001e470000,0x000000001e570000)]
0x000000000297e000 JavaThread "main" [_thread_in_native, id=200284, stack(0x0000000002850000,0x0000000002950000)]
Other Threads:
0x000000001c66a000 VMThread [stack: 0x000000001e370000,0x000000001e470000] [id=200340]
0x00000000202be000 WatcherThread [stack: 0x0000000020c40000,0x0000000020d40000] [id=200512]
VM state:not at safepoint (normal execution)
VM Mutex/Monitor currently owned by a thread: None
Heap:
PSYoungGen total 75776K, used 29142K [0x000000076b580000, 0x0000000770a00000, 0x00000007c0000000)
eden space 65024K, 44% used [0x000000076b580000,0x000000076d1f5bf0,0x000000076f500000)
from space 10752K, 0% used [0x000000076ff80000,0x000000076ff80000,0x0000000770a00000)
to space 10752K, 0% used [0x000000076f500000,0x000000076f500000,0x000000076ff80000)
ParOldGen total 173568K, used 0K [0x00000006c2000000, 0x00000006cc980000, 0x000000076b580000)
object space 173568K, 0% used [0x00000006c2000000,0x00000006c2000000,0x00000006cc980000)
Metaspace used 3400K, capacity 4716K, committed 4864K, reserved 1056768K
class space used 348K, capacity 424K, committed 512K, reserved 1048576K
Card table byte_map: [0x0000000012040000,0x0000000012840000] byte_map_base: 0x000000000ea30000
Marking Bits: (ParMarkBitMap*) 0x0000000059b64040
Begin Bits: [0x0000000013590000, 0x0000000017510000)
End Bits: [0x0000000017510000, 0x000000001b490000)
Polling page: 0x0000000000d10000
CodeCache: size=245760Kb used=1320Kb max_used=1334Kb free=244439Kb
bounds [0x0000000002c80000, 0x0000000002ef0000, 0x0000000011c80000]
total_blobs=390 nmethods=142 adapters=169
compilation: enabled
Compilation events (10 events):
Event: 3.197 Thread 0x00000000202bd800 133 1 java.security.ProtectionDomain::getCodeSource (5 bytes)
Event: 3.198 Thread 0x00000000202bd800 nmethod 133 0x0000000002dc3310 code [0x0000000002dc3460, 0x0000000002dc3570]
Event: 3.206 Thread 0x00000000202bd800 139 ! 3 java.util.zip.InflaterInputStream::read (138 bytes)
Event: 3.207 Thread 0x00000000202bd800 nmethod 139 0x0000000002dc5ad0 code [0x0000000002dc5d60, 0x0000000002dc6e28]
Event: 3.207 Thread 0x00000000202bd800 143 1 java.net.URL::getFile (5 bytes)
Event: 3.208 Thread 0x00000000202bd800 nmethod 143 0x0000000002dc2c50 code [0x0000000002dc2da0, 0x0000000002dc2eb0]
Event: 3.208 Thread 0x00000000202bd800 142 1 java.net.URL::getPort (5 bytes)
Event: 3.208 Thread 0x00000000202bd800 nmethod 142 0x0000000002dc77d0 code [0x0000000002dc7920, 0x0000000002dc7a30]
Event: 3.208 Thread 0x00000000202bd800 140 3 java.util.zip.InflaterInputStream::ensureOpen (18 bytes)
Event: 3.208 Thread 0x00000000202bd800 nmethod 140 0x0000000002dc7a90 code [0x0000000002dc7c00, 0x0000000002dc7e68]
GC Heap History (0 events):
No events
Deoptimization events (0 events):
No events
Internal exceptions (10 events):
Event: 2.973 Thread 0x000000000297e000 Exception <a 'java/security/PrivilegedActionException'> (0x000000076cc18638) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u51\3951\hotspot\src\share\vm\prims\jvm.cpp, line 1382]
Event: 2.974 Thread 0x000000000297e000 Exception <a 'java/security/PrivilegedActionException'> (0x000000076cc187f0) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u51\3951\hotspot\src\share\vm\prims\jvm.cpp, line 1382]
Event: 2.974 Thread 0x000000000297e000 Exception <a 'java/security/PrivilegedActionException'> (0x000000076cc199a8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u51\3951\hotspot\src\share\vm\prims\jvm.cpp, line 1382]
Event: 2.974 Thread 0x000000000297e000 Exception <a 'java/security/PrivilegedActionException'> (0x000000076cc19b60) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u51\3951\hotspot\src\share\vm\prims\jvm.cpp, line 1382]
Event: 2.974 Thread 0x000000000297e000 Exception <a 'java/security/PrivilegedActionException'> (0x000000076cc1ac68) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u51\3951\hotspot\src\share\vm\prims\jvm.cpp, line 1382]
Event: 2.974 Thread 0x000000000297e000 Exception <a 'java/security/PrivilegedActionException'> (0x000000076cc1ae20) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u51\3951\hotspot\src\share\vm\prims\jvm.cpp, line 1382]
Event: 2.975 Thread 0x000000000297e000 Exception <a 'java/security/PrivilegedActionException'> (0x000000076cc1bfa0) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u51\3951\hotspot\src\share\vm\prims\jvm.cpp, line 1382]
Event: 2.975 Thread 0x000000000297e000 Exception <a 'java/security/PrivilegedActionException'> (0x000000076cc1c158) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u51\3951\hotspot\src\share\vm\prims\jvm.cpp, line 1382]
Event: 2.975 Thread 0x000000000297e000 Exception <a 'java/security/PrivilegedActionException'> (0x000000076cc1d1e8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u51\3951\hotspot\src\share\vm\prims\jvm.cpp, line 1382]
Event: 2.975 Thread 0x000000000297e000 Exception <a 'java/security/PrivilegedActionException'> (0x000000076cc1d3a0) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u51\3951\hotspot\src\share\vm\prims\jvm.cpp, line 1382]
Events (10 events):
Event: 3.190 loading class scala/collection/GenSeqLike
Event: 3.190 loading class scala/collection/GenSeqLike done
Event: 3.191 loading class scala/collection/SeqLike
Event: 3.191 loading class scala/collection/SeqLike done
Event: 3.193 loading class scala/reflect/api/TypeCreator
Event: 3.193 loading class scala/reflect/api/TypeCreator done
Event: 3.205 loading class scala/Serializable
Event: 3.205 loading class scala/Serializable done
Event: 3.207 loading class com/aliyun/odps/spark/examples/sparksql/SessionProcess$$typecreator13$1
Event: 3.207 loading class com/aliyun/odps/spark/examples/sparksql/SessionProcess$$typecreator13$1 done
Dynamic libraries:
0x00007ff6d9cc0000 - 0x00007ff6d9cf7000 D:\Program Files\Java\jdk1.8.0_51\bin\java.exe
0x00007ffb863c0000 - 0x00007ffb8658f000 C:\Windows\SYSTEM32\ntdll.dll
0x00007ffb85480000 - 0x00007ffb8552d000 C:\Windows\System32\KERNEL32.DLL
0x00007ffb83390000 - 0x00007ffb835ae000 C:\Windows\System32\KERNELBASE.dll
0x00007ffb85890000 - 0x00007ffb85936000 C:\Windows\System32\ADVAPI32.dll
0x00007ffb84ee0000 - 0x00007ffb84f7e000 C:\Windows\System32\msvcrt.dll
0x00007ffb85190000 - 0x00007ffb851eb000 C:\Windows\System32\sechost.dll
0x00007ffb85360000 - 0x00007ffb8547d000 C:\Windows\System32\RPCRT4.dll
0x00007ffb85e20000 - 0x00007ffb85f86000 C:\Windows\System32\USER32.dll
0x00007ffb837b0000 - 0x00007ffb837ce000 C:\Windows\System32\win32u.dll
0x00007ffb84fb0000 - 0x00007ffb84fe4000 C:\Windows\System32\GDI32.dll
0x00007ffb837d0000 - 0x00007ffb83954000 C:\Windows\System32\gdi32full.dll
0x00007ffb76150000 - 0x00007ffb763ca000 C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.14393.4169_none_7de0bbf28341b1f2\COMCTL32.dll
0x00007ffb85b20000 - 0x00007ffb85de6000 C:\Windows\System32\combase.dll
0x00007ffb82bb0000 - 0x00007ffb82ca4000 C:\Windows\System32\ucrtbase.dll
0x00007ffb82890000 - 0x00007ffb828fc000 C:\Windows\System32\bcryptPrimitives.dll
0x00007ffb85df0000 - 0x00007ffb85e1e000 C:\Windows\System32\IMM32.DLL
0x0000000057ec0000 - 0x0000000057f92000 D:\Program Files\Java\jdk1.8.0_51\jre\bin\msvcr100.dll
0x0000000059360000 - 0x0000000059be3000 D:\Program Files\Java\jdk1.8.0_51\jre\bin\server\jvm.dll
0x00007ffb85aa0000 - 0x00007ffb85aa8000 C:\Windows\System32\PSAPI.DLL
0x00007ffb75ed0000 - 0x00007ffb75ed9000 C:\Windows\SYSTEM32\WSOCK32.dll
0x00007ffb80c70000 - 0x00007ffb80c93000 C:\Windows\SYSTEM32\WINMM.dll
0x00007ffb7bce0000 - 0x00007ffb7bcea000 C:\Windows\SYSTEM32\VERSION.dll
0x00007ffb85ab0000 - 0x00007ffb85b1a000 C:\Windows\System32\WS2_32.dll
0x00007ffb80c10000 - 0x00007ffb80c3b000 C:\Windows\SYSTEM32\WINMMBASE.dll
0x00007ffb82900000 - 0x00007ffb82942000 C:\Windows\System32\cfgmgr32.dll
0x0000000059270000 - 0x000000005927f000 D:\Program Files\Java\jdk1.8.0_51\jre\bin\verify.dll
0x0000000059240000 - 0x0000000059269000 D:\Program Files\Java\jdk1.8.0_51\jre\bin\java.dll
0x0000000057ce0000 - 0x0000000057d15000 D:\Program Files\Java\jdk1.8.0_51\jre\bin\jdwp.dll
0x0000000057cd0000 - 0x0000000057cd8000 D:\Program Files\Java\jdk1.8.0_51\jre\bin\npt.dll
0x0000000057ca0000 - 0x0000000057cc3000 D:\Program Files\Java\jdk1.8.0_51\jre\bin\instrument.dll
0x0000000059220000 - 0x0000000059236000 D:\Program Files\Java\jdk1.8.0_51\jre\bin\zip.dll
0x00007ffb83960000 - 0x00007ffb84e65000 C:\Windows\System32\SHELL32.dll
0x00007ffb82cb0000 - 0x00007ffb83383000 C:\Windows\System32\windows.storage.dll
0x00007ffb82820000 - 0x00007ffb8286c000 C:\Windows\System32\powrprof.dll
0x00007ffb85a40000 - 0x00007ffb85a92000 C:\Windows\System32\shlwapi.dll
0x00007ffb82870000 - 0x00007ffb8287f000 C:\Windows\System32\kernel.appcore.dll
0x00007ffb829f0000 - 0x00007ffb82a98000 C:\Windows\System32\shcore.dll
0x00007ffb82800000 - 0x00007ffb82814000 C:\Windows\System32\profapi.dll
0x0000000057c90000 - 0x0000000057c99000 D:\Program Files\Java\jdk1.8.0_51\jre\bin\dt_socket.dll
0x00007ffb82130000 - 0x00007ffb8218d000 C:\Windows\system32\mswsock.dll
VM Arguments:
jvm_args: -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:5920,suspend=y,server=n -javaagent:C:\Users\Pica\AppData\Local\JetBrains\IntelliJIdea2020.3\captureAgent\debugger-agent.jar -Dfile.encoding=UTF-8
java_command: com.aliyun.odps.spark.examples.sparksql.SessionProcess
java_class_path (initial): C:\Users\Pica\AppData\Local\Temp\classpath1804223408.jar;C:\Users\Pica\AppData\Local\JetBrains\IntelliJIdea2020.3\captureAgent\debugger-agent.jar
Launcher Type: SUN_STANDARD
Environment Variables:
JAVA_HOME=D:\Program Files\Java\jdk1.8.0_51
PATH=D:\Program Files\Java\jdk1.8.0_51\bin;D:\Program Files (x86)\NetSarang\Xftp 7\;D:\Program Files (x86)\NetSarang\Xshell 7\;D:\hadoop-3.0.0-cdh6.2\bin;D:\work\scala-2.11.12\bin;D:\work\gradle-6.2.1\bin;C:\Users\Pica\AppData\Local\Microsoft\WindowsApps;
USERNAME=Pica
OS=Windows_NT
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 142 Stepping 10, GenuineIntel
--------------- S Y S T E M ---------------
OS: Windows 10.0 , 64 bit Build 14393 (10.0.14393.4651)
CPU:total 8 (4 cores per cpu, 2 threads per core) family 6 model 142 stepping 10, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, avx2, aes, clmul, erms, 3dnowpref, lzcnt, ht, tsc, tscinvbit, bmi1, bmi2, adx
Memory: 4k page, physical 16639044k(3340644k free), swap 29877824k(5200k free)
vm_info: Java HotSpot(TM) 64-Bit Server VM (25.51-b03) for windows-amd64 JRE (1.8.0_51-b16), built on Jun 8 2015 18:03:07 by "java_re" with MS VC++ 10.0 (VS2010)
time: Wed Feb 23 15:03:06 2022
elapsed time: 3 seconds (0d 0h 0m 3s)
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<properties>
<spark.version>2.3.0</spark.version>
<cupid.sdk.version>3.3.8-public</cupid.sdk.version>
<scala.version>2.11.8</scala.version>
<scala.binary.version>2.11</scala.binary.version>
</properties>
<groupId>com.aliyun.odps</groupId>
<artifactId>spark-session_${scala.binary.version}</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.binary.version}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
</exclusion>
<exclusion>
<groupId>org.scala-lang</groupId>
<artifactId>scalap</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${scala.binary.version}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_${scala.binary.version}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_${scala.binary.version}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>cupid-sdk</artifactId>
<version>${cupid.sdk.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>hadoop-fs-oss</artifactId>
<version>${cupid.sdk.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-spark-datasource_${scala.binary.version}</artifactId>
<version>${cupid.sdk.version}</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-actors</artifactId>
<version>${scala.version}</version>
</dependency>
<!-- datahub streaming依赖 -->
<dependency>
<groupId>com.aliyun.emr</groupId>
<artifactId>emr-datahub_${scala.binary.version}</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-xml</artifactId>
<version>2.11.0-M4</version>
</dependency>
<dependency>
<groupId>com.aliyun.datahub</groupId>
<artifactId>aliyun-sdk-datahub</artifactId>
<version>2.9.4-public</version>
<exclusions>
<exclusion>
<groupId>net.jpountz.lz4</groupId>
<artifactId>lz4</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-kafka-0-10_${scala.binary.version}</artifactId>
<version>${spark.version}</version>
<exclusions>
<exclusion>
<groupId>net.jpountz.lz4</groupId>
<artifactId>lz4</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql-kafka-0-10_${scala.binary.version}</artifactId>
<version>${spark.version}</version>
<exclusions>
<exclusion>
<groupId>net.jpountz.lz4</groupId>
<artifactId>lz4</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>streaming-lib</artifactId>
<version>3.3.8-public</version>
<exclusions>
<exclusion>
<groupId>net.jpountz.lz4</groupId>
<artifactId>lz4</artifactId>
</exclusion>
<exclusion>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
</exclusion>
<exclusion>
<groupId>org.scala-lang</groupId>
<artifactId>scalap</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zeppelin</groupId>
<artifactId>spark-interpreter</artifactId>
<version>0.8.1</version>
</dependency>
<!--For usage of log4j2 interface-->
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jindofs</groupId>
<artifactId>sdk</artifactId>
<version>3.7.2</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/jindofs-sdk-3.7.2.jar</systemPath>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>false</minimizeJar>
<shadedArtifactAttached>true</shadedArtifactAttached>
<artifactSet>
<includes>
<!-- Include here the dependencies you
want to be packed in your fat jar -->
<include>*:*</include>
</includes>
</artifactSet>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
<exclude>**/log4j.properties</exclude>
</excludes>
</filter>
</filters>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>reference.conf</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>
META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
</resource>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.3.2</version>
<executions>
<execution>
<id>scala-compile-first</id>
<phase>process-resources</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>scala-test-compile-first</id>
<phase>process-test-resources</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>6</source>
<target>6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
JvmtiExport can_access_local_variables 1
JvmtiExport can_hotswap_or_post_breakpoint 1
JvmtiExport can_post_on_exceptions 1
# 164 ciObject found
ciMethod java/lang/String equals (Ljava/lang/Object;)Z 4097 11241 12162 0 -1
ciMethod java/lang/String toLowerCase ()Ljava/lang/String; 4097 1 2210 0 -1
ciMethod java/lang/StringBuilder <init> ()V 4097 1 1472 0 -1
ciMethod java/lang/StringBuilder append (Ljava/lang/String;)Ljava/lang/StringBuilder; 4097 1 4297 0 -1
ciMethod java/lang/StringBuilder append (I)Ljava/lang/StringBuilder; 0 0 1 0 -1
ciMethod java/lang/StringBuilder toString ()Ljava/lang/String; 4097 1 1519 0 -1
ciMethod java/net/URL getPort ()I 10257 1 1271 0 -1
ciMethod java/net/URL getDefaultPort ()I 4097 1 580 0 -1
ciMethod java/net/URL getProtocol ()Ljava/lang/String; 32801 1 4100 0 -1
ciMethod java/net/URL getHost ()Ljava/lang/String; 14617 1 1827 0 -1
ciMethod java/net/URL getFile ()Ljava/lang/String; 19481 1 2421 0 -1
ciMethod java/security/AccessController doPrivileged (Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object; 8929 1 1116 180 -1
ciMethod java/util/Vector size ()I 14129 1 1766 0 0
ciMethod java/util/Vector removeElementAt (I)V 4097 1 571 0 -1
ciMethod java/util/Stack push (Ljava/lang/Object;)Ljava/lang/Object; 4097 1 571 0 -1
ciMethod java/util/Stack pop ()Ljava/lang/Object; 4097 1 571 0 0
ciMethod java/util/Stack peek ()Ljava/lang/Object; 4097 1 572 0 -1
ciMethod java/util/Stack empty ()Z 4097 1 601 0 0
ciMethod java/util/ArrayList ensureCapacityInternal (I)V 4097 1 578 0 -1
ciMethod java/util/ArrayList size ()I 47185 1 5898 0 0
ciMethod java/util/ArrayList elementData (I)Ljava/lang/Object; 4097 1 5625 0 0
ciMethod java/util/ArrayList get (I)Ljava/lang/Object; 4097 1 5624 0 0
ciMethod java/util/ArrayList add (Ljava/lang/Object;)Z 4097 1 578 0 0
ciMethod java/util/ArrayList rangeCheck (I)V 4097 1 5625 0 0
ciMethod java/util/HashMap hash (Ljava/lang/Object;)I 4097 1 3583 0 -1
ciMethod java/util/HashMap getNode (ILjava/lang/Object;)Ljava/util/HashMap$Node; 4097 81 2356 0 -1
ciMethod java/util/HashMap containsKey (Ljava/lang/Object;)Z 4097 1 581 0 0
ciMethod java/util/HashMap put (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 4097 1 1227 0 0
ciMethod java/util/HashMap putVal (ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/lang/Object; 4097 433 1227 0 -1
ciMethod sun/misc/URLClassPath disableAllLookupCaches ()V 17 1 2 0 -1
ciMethod sun/misc/URLClassPath validateLookupCache (ILjava/lang/String;)V 3833 1 479 0 0
ciMethod sun/misc/URLClassPath getNextLoader ([II)Lsun/misc/URLClassPath$Loader; 4097 1 5656 0 -1
ciMethod sun/misc/URLClassPath getLoader (I)Lsun/misc/URLClassPath$Loader; 4097 4553 5656 0 0
ciMethod sun/misc/URLClassPath getLoader (Ljava/net/URL;)Lsun/misc/URLClassPath$Loader; 4097 1 569 90 0
ciMethod sun/misc/URLClassPath push ([Ljava/net/URL;)V 57 4553 7 0 0
ciMethod sun/net/util/URLUtil urlNoFragString (Ljava/net/URL;)Ljava/lang/String; 4097 1 580 0 0
ciMethod sun/misc/URLClassPath$3 <init> (Lsun/misc/URLClassPath;Ljava/net/URL;)V 4097 1 569 0 -1
ciMethod sun/misc/URLClassPath$Loader getClassPath ()[Ljava/net/URL; 9 1 1 0 -1
ciMethod java/security/PrivilegedActionException getException ()Ljava/lang/Exception; 1441 1 180 0 -1
ciMethodData java/util/Stack empty ()Z 1 601 orig 264 136 112 147 89 0 0 0 0 224 167 212 27 0 0 0 0 176 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 201 2 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 104 0 0 0 255 255 255 255 5 0 1 0 0 0 0 0 data 13 0x10005 0x0 0x20407540 0x59 0x0 0x0 0x40007 0x3a 0x38 0x1f 0x80003 0x1f 0x18 oops 1 2 java/util/Stack
ciMethodData sun/misc/URLClassPath getNextLoader ([II)Lsun/misc/URLClassPath$Loader; 2 5656 orig 264 136 112 147 89 0 0 0 0 40 177 230 27 0 0 0 0 168 3 0 0 16 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 193 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 14 0 2 0 0 0 80 2 0 0 255 255 255 255 7 0 4 0 0 0 0 0 data 74 0x40007 0x1418 0x20 0x0 0xa0007 0x1418 0x220 0x0 0x100007 0x0 0x200 0x0 0x1a0005 0x0 0x0 0x0 0x0 0x0 0x1d0004 0x0 0x0 0x0 0x0 0x0 0x240007 0x0 0x180 0x0 0x2e0002 0x0 0x330005 0x0 0x0 0x0 0x0 0x0 0x390005 0x0 0x0 0x0 0x0 0x0 0x3e0005 0x0 0x0 0x0 0x0 0x0 0x420005 0x0 0x0 0x0 0x0 0x0 0x450005 0x0 0x0 0x0 0x0 0x0 0x480005 0x0 0x0 0x0 0x0 0x0 0x4b0005 0x0 0x0 0x0 0x0 0x0 0x540002 0x1418 oops 0
ciMethodData sun/misc/URLClassPath getLoader (I)Lsun/misc/URLClassPath$Loader; 2 5657 orig 264 136 112 147 89 0 0 0 0 184 178 230 27 0 0 0 0 168 5 0 0 200 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 57 2 0 0 201 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 70 0 2 0 0 0 88 4 0 0 255 255 255 255 7 0 4 0 0 0 0 0 data 139 0x40007 0x1419 0x20 0x0 0xd0005 0x0 0x2047cfc0 0x1419 0x0 0x0 0x130007 0x13fb 0x2b8 0x1e 0x210005 0x0 0x20407540 0x1e 0x0 0x0 0x240007 0x0 0x20 0x1e 0x2f0005 0x0 0x0 0x0 0x0 0x0 0x320004 0x0 0x0 0x0 0x0 0x0 0x380003 0x0 0x18 0x430002 0x0 0x4c0005 0x0 0x0 0x0 0x0 0x0 0x4f0007 0x0 0x38 0x0 0x520003 0x0 0xfffffffffffffe88 0x570002 0x0 0x5e0005 0x0 0x0 0x0 0x0 0x0 0x650007 0x0 0x30 0x0 0x6b0002 0x0 0x6e0003 0x0 0x30 0x730003 0x0 0xfffffffffffffde8 0x7b0005 0x0 0x0 0x0 0x0 0x0 0x7f0002 0x0 0x880005 0x0 0x0 0x0 0x0 0x0 0x930005 0x0 0x0 0x0 0x0 0x0 0x970003 0x0 0xfffffffffffffd30 0x9d0007 0x13fb 0xf0 0x0 0xa70002 0x0 0xac0005 0x0 0x0 0x0 0x0 0x0 0xb00005 0x0 0x0 0x0 0x0 0x0 0xb30005 0x0 0x0 0x0 0x0 0x0 0xb60005 0x0 0x0 0x0 0x0 0x0 0xbe0005 0x0 0x2047cfc0 0x13fb 0x0 0x0 0xc10004 0x0 0x2040af90 0x13dc 0x2040b040 0x1f oops 5 6 java/util/ArrayList 16 java/util/Stack 129 java/util/ArrayList 135 sun/misc/URLClassPath$JarLoader 137 sun/misc/URLClassPath$FileLoader
ciMethodData java/util/ArrayList get (I)Ljava/lang/Object; 2 5625 orig 264 136 112 147 89 0 0 0 0 168 191 214 27 0 0 0 0 144 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 201 159 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 6 0 2 0 0 0 64 0 0 0 255 255 255 255 2 0 2 0 0 0 0 0 data 8 0x20002 0x13f9 0x70005 0x0 0x2047cfc0 0x13f9 0x0 0x0 oops 1 4 java/util/ArrayList
ciMethodData java/util/ArrayList rangeCheck (I)V 2 5625 orig 264 136 112 147 89 0 0 0 0 136 200 214 27 0 0 0 0 104 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 201 159 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 5 0 2 0 0 0 64 0 0 0 255 255 255 255 7 0 5 0 0 0 0 0 data 8 0x50007 0x13f9 0x40 0x0 0xe0002 0x0 0x110002 0x0 oops 0
ciMethodData java/util/ArrayList elementData (I)Ljava/lang/Object; 2 5625 orig 264 136 112 147 89 0 0 0 0 8 191 214 27 0 0 0 0 40 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 201 159 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 1 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 data 0 oops 0
instanceKlass org/apache/spark/broadcast/Broadcast
instanceKlass org/apache/spark/internal/Logging
instanceKlass scala/reflect/api/TypeCreator
instanceKlass scala/Serializable
instanceKlass scala/collection/Seq
instanceKlass scala/collection/SeqLike
instanceKlass scala/collection/GenSeq
instanceKlass scala/collection/GenSeqLike
instanceKlass scala/collection/Iterable
instanceKlass scala/collection/IterableLike
instanceKlass scala/Equals
instanceKlass scala/collection/GenIterable
instanceKlass scala/collection/GenIterableLike
instanceKlass scala/collection/Traversable
instanceKlass scala/collection/GenTraversable
instanceKlass scala/collection/generic/GenericTraversableTemplate
instanceKlass scala/collection/TraversableLike
instanceKlass scala/collection/GenTraversableLike
instanceKlass scala/collection/Parallelizable
instanceKlass scala/collection/TraversableOnce
instanceKlass scala/collection/GenTraversableOnce
instanceKlass scala/collection/generic/FilterMonadic
instanceKlass scala/collection/generic/HasNewBuilder
instanceKlass scala/PartialFunction
instanceKlass scala/Function1
instanceKlass java/lang/Class$MethodArray
instanceKlass sun/launcher/LauncherHelper$FXHelper
instanceKlass com/aliyun/odps/spark/examples/sparksql/SessionProcess
instanceKlass sun/misc/PostVMInitHook
instanceKlass java/lang/invoke/MethodHandleStatics$1
instanceKlass java/lang/invoke/MethodHandleStatics
instanceKlass java/lang/invoke/MemberName$Factory
instanceKlass java/lang/ClassValue$Version
instanceKlass java/lang/ClassValue$Identity
instanceKlass java/lang/ClassValue
instanceKlass java/lang/invoke/MethodHandleImpl$3
instanceKlass java/lang/invoke/MethodHandleImpl$2
instanceKlass java/util/function/Function
instanceKlass java/lang/invoke/MethodHandleImpl$1
instanceKlass java/lang/invoke/MethodHandleImpl
instanceKlass com/intellij/rt/debugger/agent/CaptureStorage
instanceKlass org/jetbrains/capture/org/objectweb/asm/ClassVisitor
instanceKlass com/intellij/rt/debugger/agent/CaptureAgent$CaptureTransformer
instanceKlass java/net/URI$Parser
instanceKlass java/net/URI
instanceKlass com/intellij/rt/debugger/agent/CaptureAgent$FieldKeyProvider
instanceKlass com/intellij/rt/debugger/agent/CaptureAgent$1
instanceKlass com/intellij/rt/debugger/agent/CaptureAgent$ParamKeyProvider
instanceKlass sun/instrument/InstrumentationImpl$1
instanceKlass com/intellij/rt/debugger/agent/CaptureAgent$InstrumentPoint
instanceKlass java/lang/instrument/ClassFileTransformer
instanceKlass com/intellij/rt/debugger/agent/CaptureAgent$KeyProvider
instanceKlass com/intellij/rt/debugger/agent/CaptureAgent
instanceKlass java/io/FilePermission$1
instanceKlass sun/net/www/MessageHeader
instanceKlass java/net/URLConnection
instanceKlass java/security/PermissionCollection
instanceKlass sun/nio/ByteBuffered
instanceKlass sun/security/util/SignatureFileVerifier
instanceKlass sun/security/util/ManifestEntryVerifier
instanceKlass java/lang/Package
instanceKlass sun/misc/Resource
instanceKlass java/util/LinkedList$Node
instanceKlass java/util/jar/JarVerifier$3
instanceKlass java/security/CodeSigner
instanceKlass java/util/jar/JarVerifier
instanceKlass java/util/jar/Attributes$Name
instanceKlass java/util/jar/Attributes
instanceKlass sun/misc/IOUtils
instanceKlass java/util/zip/ZStreamRef
instanceKlass java/util/zip/Inflater
instanceKlass sun/util/calendar/CalendarUtils
instanceKlass sun/util/calendar/CalendarDate
instanceKlass java/util/TimeZone$1
instanceKlass java/util/zip/CRC32
instanceKlass java/util/zip/Checksum
instanceKlass sun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule
instanceKlass java/io/DataInput
instanceKlass sun/util/calendar/ZoneInfoFile$1
instanceKlass sun/util/calendar/ZoneInfoFile
instanceKlass java/util/TimeZone
instanceKlass sun/util/calendar/CalendarSystem
instanceKlass java/util/Date
instanceKlass java/util/zip/ZipUtils
instanceKlass java/util/zip/ZipEntry
instanceKlass sun/misc/ExtensionDependency
instanceKlass sun/misc/JarIndex
instanceKlass sun/nio/ch/DirectBuffer
instanceKlass sun/misc/PerfCounter$CoreCounters
instanceKlass sun/misc/Perf
instanceKlass sun/misc/Perf$GetPerfAction
instanceKlass sun/misc/PerfCounter
instanceKlass java/util/zip/ZipCoder
instanceKlass java/util/Deque
instanceKlass java/util/Queue
instanceKlass java/nio/charset/StandardCharsets
instanceKlass java/util/jar/JavaUtilJarAccessImpl
instanceKlass sun/misc/JavaUtilJarAccess
instanceKlass sun/misc/FileURLMapper
instanceKlass sun/misc/URLClassPath$JarLoader$1
instanceKlass sun/nio/cs/ThreadLocalCoders$Cache
instanceKlass sun/nio/cs/ThreadLocalCoders
instanceKlass java/util/zip/ZipFile$1
instanceKlass sun/misc/JavaUtilZipFileAccess
instanceKlass java/util/zip/ZipFile
instanceKlass java/util/zip/ZipConstants
instanceKlass sun/misc/URLClassPath$Loader
instanceKlass sun/misc/URLClassPath$3
instanceKlass sun/net/util/URLUtil
instanceKlass java/net/URLClassLoader$1
instanceKlass sun/instrument/TransformerManager$TransformerInfo
instanceKlass sun/instrument/TransformerManager
instanceKlass sun/instrument/InstrumentationImpl
instanceKlass java/lang/instrument/Instrumentation
instanceKlass sun/misc/VMSupport
instanceKlass java/lang/SystemClassLoaderAction
instanceKlass sun/misc/Launcher$AppClassLoader$1
instanceKlass sun/misc/URLClassPath
instanceKlass java/security/Principal
instanceKlass java/security/ProtectionDomain$Key
instanceKlass java/security/ProtectionDomain$3
instanceKlass sun/misc/JavaSecurityProtectionDomainAccess
instanceKlass java/security/ProtectionDomain$1
instanceKlass sun/misc/JavaSecurityAccess
instanceKlass java/net/URLStreamHandler
instanceKlass java/net/Parts
instanceKlass java/util/BitSet
instanceKlass sun/net/www/ParseUtil
instanceKlass java/io/FileInputStream$1
instanceKlass java/lang/CharacterData
instanceKlass sun/util/locale/LocaleUtils
instanceKlass java/util/Locale$LocaleKey
instanceKlass sun/util/locale/BaseLocale$Key
instanceKlass sun/util/locale/BaseLocale
instanceKlass java/util/concurrent/ConcurrentHashMap$CollectionView
instanceKlass java/util/concurrent/ConcurrentHashMap$CounterCell
instanceKlass java/util/concurrent/ConcurrentHashMap$Node
instanceKlass java/util/concurrent/locks/ReentrantLock
instanceKlass java/util/concurrent/locks/Lock
instanceKlass java/util/concurrent/ConcurrentMap
instanceKlass sun/util/locale/LocaleObjectCache
instanceKlass java/util/Locale
instanceKlass java/lang/reflect/Array
instanceKlass java/io/Reader
instanceKlass sun/misc/MetaIndex
instanceKlass sun/misc/Launcher$ExtClassLoader$1
instanceKlass java/util/StringTokenizer
instanceKlass java/net/URLClassLoader$7
instanceKlass sun/misc/JavaNetAccess
instanceKlass java/lang/ClassLoader$ParallelLoaders
instanceKlass sun/security/util/Debug
instanceKlass sun/misc/Launcher$Factory
instanceKlass java/net/URLStreamHandlerFactory
instanceKlass java/lang/Compiler$1
instanceKlass java/lang/Compiler
instanceKlass java/lang/System$2
instanceKlass sun/misc/JavaLangAccess
instanceKlass sun/io/Win32ErrorMode
instanceKlass sun/misc/OSEnvironment
instanceKlass java/lang/Integer$IntegerCache
instanceKlass sun/misc/NativeSignalHandler
instanceKlass sun/misc/Signal
instanceKlass java/lang/Terminator$1
instanceKlass sun/misc/SignalHandler
instanceKlass java/lang/Terminator
instanceKlass java/io/ExpiringCache$Entry
instanceKlass java/lang/ClassLoader$3
instanceKlass java/nio/charset/CoderResult$Cache
instanceKlass java/nio/charset/CoderResult
instanceKlass java/lang/Readable
instanceKlass java/lang/StringCoding$StringEncoder
instanceKlass java/lang/ClassLoader$NativeLibrary
instanceKlass java/nio/file/Path
instanceKlass java/nio/file/Watchable
instanceKlass java/lang/Enum
instanceKlass java/io/ExpiringCache
instanceKlass java/io/FileSystem
instanceKlass java/io/DefaultFileSystem
instanceKlass java/nio/Bits$1
instanceKlass sun/misc/JavaNioAccess
instanceKlass java/nio/ByteOrder
instanceKlass java/nio/Bits
instanceKlass java/nio/charset/CharsetEncoder
instanceKlass sun/nio/cs/ArrayEncoder
instanceKlass sun/security/action/GetPropertyAction
instanceKlass java/io/Writer
instanceKlass sun/reflect/misc/ReflectUtil
instanceKlass java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl$1
instanceKlass java/security/PrivilegedExceptionAction
instanceKlass java/util/concurrent/atomic/AtomicReferenceFieldUpdater
instanceKlass java/io/OutputStream
instanceKlass java/io/Flushable
instanceKlass sun/misc/SharedSecrets
instanceKlass java/io/FileDescriptor$1
instanceKlass sun/misc/JavaIOFileDescriptorAccess
instanceKlass java/io/FileDescriptor
instanceKlass sun/misc/Version
instanceKlass java/lang/Runtime
instanceKlass java/util/Hashtable$Enumerator
instanceKlass java/util/Iterator
instanceKlass java/util/Enumeration
instanceKlass java/util/Objects
instanceKlass java/util/Collections$SynchronizedCollection
instanceKlass java/nio/charset/CodingErrorAction
instanceKlass java/nio/charset/CharsetDecoder
instanceKlass sun/nio/cs/ArrayDecoder
instanceKlass sun/nio/cs/ext/DelegatableDecoder
instanceKlass sun/nio/cs/ext/DoubleByte
instanceKlass java/lang/StringCoding$StringDecoder
instanceKlass java/lang/ThreadLocal$ThreadLocalMap
instanceKlass java/lang/StringCoding
instanceKlass sun/nio/cs/HistoricallyNamedCharset
instanceKlass java/util/TreeMap$Entry
instanceKlass sun/misc/ASCIICaseInsensitiveComparator
instanceKlass java/util/NavigableMap
instanceKlass java/util/SortedMap
instanceKlass sun/reflect/ReflectionFactory$1
instanceKlass java/lang/Class$1
instanceKlass java/nio/charset/Charset$ExtendedProviderHolder$1
instanceKlass java/nio/charset/Charset$ExtendedProviderHolder
instanceKlass java/util/Arrays
instanceKlass java/lang/reflect/ReflectAccess
instanceKlass sun/reflect/LangReflectAccess
instanceKlass java/lang/reflect/Modifier
instanceKlass sun/reflect/annotation/AnnotationType
instanceKlass java/lang/Class$AnnotationData
instanceKlass sun/reflect/generics/repository/AbstractRepository
instanceKlass java/lang/Class$Atomic
instanceKlass java/lang/Class$ReflectionData
instanceKlass java/lang/Class$3
instanceKlass java/util/HashMap$Node
instanceKlass sun/reflect/Reflection
instanceKlass java/util/Collections$UnmodifiableCollection
instanceKlass java/util/Set
instanceKlass java/util/Collections
instanceKlass java/lang/ThreadLocal
instanceKlass java/util/AbstractMap
instanceKlass java/nio/charset/spi/CharsetProvider
instanceKlass java/nio/charset/Charset
instanceKlass java/lang/Math
instanceKlass java/util/Hashtable$Entry
instanceKlass java/util/Map$Entry
instanceKlass sun/misc/VM
instanceKlass java/lang/ref/ReferenceQueue$Lock
instanceKlass java/lang/ref/ReferenceQueue
instanceKlass java/lang/ref/Reference$Lock
instanceKlass sun/reflect/ReflectionFactory
instanceKlass java/util/AbstractCollection
instanceKlass java/util/RandomAccess
instanceKlass java/util/List
instanceKlass java/util/Collection
instanceKlass java/lang/Iterable
instanceKlass java/security/cert/Certificate
instanceKlass sun/reflect/ReflectionFactory$GetReflectionFactoryAction
instanceKlass java/security/PrivilegedAction
instanceKlass java/security/AccessController
instanceKlass java/security/Permission
instanceKlass java/security/Guard
instanceKlass java/lang/String$CaseInsensitiveComparator
instanceKlass java/util/Comparator
instanceKlass java/io/ObjectStreamField
instanceKlass java/lang/Number
instanceKlass java/lang/Character
instanceKlass java/lang/Boolean
instanceKlass java/nio/Buffer
instanceKlass java/lang/StackTraceElement
instanceKlass java/security/CodeSource
instanceKlass sun/misc/Launcher
instanceKlass java/util/jar/Manifest
instanceKlass java/net/URL
instanceKlass java/io/File
instanceKlass java/io/InputStream
instanceKlass java/io/Closeable
instanceKlass java/lang/AutoCloseable
instanceKlass sun/misc/Unsafe
instanceKlass java/lang/AbstractStringBuilder
instanceKlass java/lang/Appendable
instanceKlass java/lang/invoke/CallSite
instanceKlass java/lang/invoke/MethodType
instanceKlass java/lang/invoke/LambdaForm
instanceKlass java/lang/invoke/MethodHandleNatives
instanceKlass java/lang/invoke/MemberName
instanceKlass java/lang/invoke/MethodHandle
instanceKlass sun/reflect/CallerSensitive
instanceKlass java/lang/annotation/Annotation
instanceKlass sun/reflect/FieldAccessor
instanceKlass sun/reflect/ConstantPool
instanceKlass sun/reflect/ConstructorAccessor
instanceKlass sun/reflect/MethodAccessor
instanceKlass sun/reflect/MagicAccessorImpl
instanceKlass java/lang/reflect/Parameter
instanceKlass java/lang/reflect/Member
instanceKlass java/lang/reflect/AccessibleObject
instanceKlass java/util/Dictionary
instanceKlass java/util/Map
instanceKlass java/lang/ThreadGroup
instanceKlass java/lang/Thread$UncaughtExceptionHandler
instanceKlass java/lang/Thread
instanceKlass java/lang/Runnable
instanceKlass java/lang/ref/Reference
instanceKlass java/security/AccessControlContext
instanceKlass java/security/ProtectionDomain
instanceKlass java/lang/SecurityManager
instanceKlass java/lang/Throwable
instanceKlass java/lang/System
instanceKlass java/lang/ClassLoader
instanceKlass java/lang/Cloneable
instanceKlass java/lang/Class
instanceKlass java/lang/reflect/Type
instanceKlass java/lang/reflect/GenericDeclaration
instanceKlass java/lang/reflect/AnnotatedElement
instanceKlass java/lang/String
instanceKlass java/lang/CharSequence
instanceKlass java/lang/Comparable
instanceKlass java/io/Serializable
ciInstanceKlass java/lang/Object 1 1 79 3 3 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 7 100 100 1 1 1 12 12 12 12 12 12 12 12 12 12 10 10 10 10 10 10 10 10 10 10 1
ciInstanceKlass java/io/Serializable 1 0 7 1 1 1 100 100 1
ciInstanceKlass java/lang/String 1 1 538 3 3 3 3 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 7 100 100 100 7 7 100 100 100 100 100 100 100 100 100 7 100 7 7 100 7 100 100 7 100 7 100 100 100 7 7 100 100 100 7 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 1 1
staticfield java/lang/String serialPersistentFields [Ljava/io/ObjectStreamField; 0 [Ljava/io/ObjectStreamField;
staticfield java/lang/String CASE_INSENSITIVE_ORDER Ljava/util/Comparator; java/lang/String$CaseInsensitiveComparator
ciInstanceKlass java/lang/Class 1 1 1190 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 5 0 8 8 8 8 8 100 100 100 100 100 100 100 7 100 7 100 7 100 100 7 100 7 7 100 7 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 7 100 7 100 100 100 7 100 100 7 7 100 100 100 7 100 100 100 100 7 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 7 7 7 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1 1 1 1 1 1 1 1
staticfield java/lang/Class serialPersistentFields [Ljava/io/ObjectStreamField; 0 [Ljava/io/ObjectStreamField;
ciInstanceKlass java/lang/Cloneable 1 0 7 1 1 1 100 100 1
instanceKlass sun/reflect/DelegatingClassLoader
instanceKlass java/security/SecureClassLoader
ciInstanceKlass java/lang/ClassLoader 1 1 842 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 100 7 100 100 100 100 7 100 100 100 7 7 7 100 7 100 100 100 100 7 7 100 100 7 100 7 7 100 100 100 100 7 100 100 7 7 100 7 7 100 7 100 7 7 100 100 7 7 7 7 100 7 7 100 100 7 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 1 1
staticfield java/lang/ClassLoader nocerts [Ljava/security/cert/Certificate; 0 [Ljava/security/cert/Certificate;
ciInstanceKlass java/lang/System 1 1 369 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 7 100 7 100 100 100 100 100 100 100 7 100 100 7 100 100 7 7 7 7 100 100 100 7 100 100 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1
staticfield java/lang/System in Ljava/io/InputStream; java/io/BufferedInputStream
staticfield java/lang/System out Ljava/io/PrintStream; java/io/PrintStream
staticfield java/lang/System err Ljava/io/PrintStream; java/io/PrintStream
instanceKlass java/lang/Exception
instanceKlass java/lang/Error
ciInstanceKlass java/lang/Throwable 1 1 327 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 100 100 7 100 100 100 100 7 7 100 100 100 100 100 100 100 100 100 7 7 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 1 1 1 1 1
staticfield java/lang/Throwable UNASSIGNED_STACK [Ljava/lang/StackTraceElement; 0 [Ljava/lang/StackTraceElement;
staticfield java/lang/Throwable SUPPRESSED_SENTINEL Ljava/util/List; java/util/Collections$UnmodifiableRandomAccessList
staticfield java/lang/Throwable EMPTY_THROWABLE_ARRAY [Ljava/lang/Throwable; 0 [Ljava/lang/Throwable;
staticfield java/lang/Throwable $assertionsDisabled Z 1
instanceKlass java/lang/VirtualMachineError
instanceKlass java/lang/LinkageError
instanceKlass java/lang/ThreadDeath
ciInstanceKlass java/lang/Error 1 1 30 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 1 1 12 12 12 12 12 10 10 10 10 10 1
ciInstanceKlass java/lang/ThreadDeath 0 0 18 1 1 1 1 1 1 1 1 1 1 5 0 100 100 12 10 1
instanceKlass java/lang/instrument/UnmodifiableClassException
instanceKlass java/security/PrivilegedActionException
instanceKlass java/io/IOException
instanceKlass java/lang/ReflectiveOperationException
instanceKlass java/lang/RuntimeException
ciInstanceKlass java/lang/Exception 1 1 30 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 1 1 12 12 12 12 12 10 10 10 10 10 1
instanceKlass java/lang/IllegalStateException
instanceKlass java/lang/IllegalArgumentException
instanceKlass java/lang/ArithmeticException
instanceKlass java/lang/NullPointerException
instanceKlass java/lang/IllegalMonitorStateException
instanceKlass java/lang/ArrayStoreException
instanceKlass java/lang/ClassCastException
ciInstanceKlass java/lang/RuntimeException 1 1 30 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 1 1 12 12 12 12 12 10 10 10 10 10 1
ciInstanceKlass java/lang/SecurityManager 0 0 375 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1
ciInstanceKlass java/security/ProtectionDomain 1 1 267 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 100 100 100 100 100 100 100 100 100 7 7 100 7 7 7 100 7 7 100 100 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 1
staticfield java/security/ProtectionDomain debug Lsun/security/util/Debug; null
ciInstanceKlass java/security/AccessControlContext 1 1 302 8 8 8 8 8 8 8 8 8 8 8 8 8 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 7 100 100 100 100 100 7 100 100 7 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 1
instanceKlass java/net/URLClassLoader
ciInstanceKlass java/security/SecureClassLoader 1 1 130 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 100 100 7 100 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1
staticfield java/security/SecureClassLoader debug Lsun/security/util/Debug; null
instanceKlass java/lang/ClassNotFoundException
ciInstanceKlass java/lang/ReflectiveOperationException 1 1 27 1 1 1 1 1 1 1 1 1 1 1 1 5 0 7 100 1 12 12 12 12 10 10 10 10 1
ciInstanceKlass java/lang/ClassNotFoundException 1 1 32 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 100 1 1 1 12 12 12 9 10 10 1
instanceKlass java/lang/IncompatibleClassChangeError
instanceKlass java/lang/BootstrapMethodError
instanceKlass java/lang/NoClassDefFoundError
ciInstanceKlass java/lang/LinkageError 1 1 24 1 1 1 1 1 1 1 1 1 1 1 5 0 7 100 1 12 12 12 10 10 10 1
ciInstanceKlass java/lang/NoClassDefFoundError 0 0 21 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 1
ciInstanceKlass java/lang/ClassCastException 1 1 21 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 1
ciInstanceKlass java/lang/ArrayStoreException 1 1 21 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 1
instanceKlass java/lang/InternalError
instanceKlass java/lang/StackOverflowError
instanceKlass java/lang/OutOfMemoryError
ciInstanceKlass java/lang/VirtualMachineError 1 1 27 1 1 1 1 1 1 1 1 1 1 1 1 5 0 7 100 1 12 12 12 12 10 10 10 10 1
ciInstanceKlass java/lang/OutOfMemoryError 1 1 21 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 1
ciInstanceKlass java/lang/StackOverflowError 1 1 21 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 1
ciInstanceKlass java/lang/IllegalMonitorStateException 1 1 21 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 1
instanceKlass java/lang/ref/PhantomReference
instanceKlass java/lang/ref/FinalReference
instanceKlass java/lang/ref/WeakReference
instanceKlass java/lang/ref/SoftReference
ciInstanceKlass java/lang/ref/Reference 1 1 117 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 1 1 1
instanceKlass sun/util/locale/LocaleObjectCache$CacheEntry
ciInstanceKlass java/lang/ref/SoftReference 1 1 35 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 7 1 1 1 1 12 12 12 12 12 9 9 10 10 10 1
instanceKlass java/lang/ClassValue$Entry
instanceKlass java/util/WeakHashMap$Entry
instanceKlass java/lang/ThreadLocal$ThreadLocalMap$Entry
ciInstanceKlass java/lang/ref/WeakReference 1 1 20 1 1 1 1 1 1 1 1 7 100 1 1 1 1 12 12 10 10 1
instanceKlass java/lang/ref/Finalizer
ciInstanceKlass java/lang/ref/FinalReference 1 1 16 1 1 1 1 1 1 1 100 7 1 1 1 12 10 1
instanceKlass sun/misc/Cleaner
ciInstanceKlass java/lang/ref/PhantomReference 0 0 19 1 1 1 1 1 1 1 1 1 1 100 100 1 1 1 12 10 1
ciInstanceKlass sun/misc/Cleaner 0 0 74 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 11 1
ciInstanceKlass java/lang/ref/Finalizer 1 1 148 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 7 7 100 7 7 100 100 100 7 7 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 1
staticfield java/lang/ref/Finalizer lock Ljava/lang/Object; java/lang/Object
instanceKlass java/lang/ref/Finalizer$FinalizerThread
instanceKlass java/lang/ref/Reference$ReferenceHandler
ciInstanceKlass java/lang/Thread 1 1 546 3 3 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 100 100 100 100 100 100 100 100 100 100 100 100 7 100 7 100 7 7 100 7 100 100 100 100 100 100 7 100 100 100 100 100 100 100 7 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 1 1 1 1 1
staticfield java/lang/Thread EMPTY_STACK_TRACE [Ljava/lang/StackTraceElement; 0 [Ljava/lang/StackTraceElement;
staticfield java/lang/Thread SUBCLASS_IMPLEMENTATION_PERMISSION Ljava/lang/RuntimePermission; java/lang/RuntimePermission
ciInstanceKlass java/lang/ThreadGroup 1 1 268 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 7 100 100 7 7 100 100 7 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 1
instanceKlass java/util/Hashtable
ciInstanceKlass java/util/Dictionary 1 1 31 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 1 1 1 1 1 1 12 10 1
instanceKlass java/util/Properties
ciInstanceKlass java/util/Hashtable 1 1 397 3 3 4 4 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 5 0 100 100 100 100 100 100 100 100 100 100 7 100 100 7 100 7 100 100 100 7 100 7 7 100 7 7 7 100 100 7 7 7 100 7 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 1 1 1 1
ciInstanceKlass java/util/Properties 1 1 263 3 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 100 100 100 100 100 100 7 100 100 100 100 100 7 100 100 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 1 1 1
staticfield java/util/Properties hexDigit [C 16
instanceKlass java/lang/reflect/Executable
instanceKlass java/lang/reflect/Field
ciInstanceKlass java/lang/reflect/AccessibleObject 1 1 144 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 100 100 7 7 100 7 100 7 7 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 1
staticfield java/lang/reflect/AccessibleObject ACCESS_PERMISSION Ljava/security/Permission; java/lang/reflect/ReflectPermission
staticfield java/lang/reflect/AccessibleObject reflectionFactory Lsun/reflect/ReflectionFactory; sun/reflect/ReflectionFactory
ciInstanceKlass java/lang/reflect/Field 1 1 362 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 7 7 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1 1
ciInstanceKlass java/lang/reflect/Parameter 0 0 210 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 1
instanceKlass java/lang/reflect/Constructor
instanceKlass java/lang/reflect/Method
ciInstanceKlass java/lang/reflect/Executable 1 1 378 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 100 100 100 100 100 100 100 7 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 1 1
ciInstanceKlass java/lang/reflect/Method 1 1 346 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 100 100 100 100 100 100 7 100 7 100 100 100 100 100 100 7 100 7 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 1
ciInstanceKlass java/lang/reflect/Constructor 1 1 330 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 100 100 100 100 100 100 7 7 100 100 100 100 100 7 100 7 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 1 1
instanceKlass sun/reflect/FieldAccessorImpl
instanceKlass sun/reflect/ConstructorAccessorImpl
instanceKlass sun/reflect/MethodAccessorImpl
ciInstanceKlass sun/reflect/MagicAccessorImpl 1 1 13 1 1 1 1 1 1 1 7 100 12 10 1
instanceKlass sun/reflect/DelegatingMethodAccessorImpl
instanceKlass sun/reflect/NativeMethodAccessorImpl
ciInstanceKlass sun/reflect/MethodAccessorImpl 1 1 22 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 100 100 12 10 1
instanceKlass sun/reflect/DelegatingConstructorAccessorImpl
instanceKlass sun/reflect/NativeConstructorAccessorImpl
ciInstanceKlass sun/reflect/ConstructorAccessorImpl 1 1 24 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 7 12 10 1
ciInstanceKlass sun/reflect/DelegatingClassLoader 0 0 13 1 1 1 1 1 1 1 100 100 1 12 10
ciInstanceKlass sun/reflect/ConstantPool 0 0 106 8 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1
instanceKlass sun/reflect/UnsafeFieldAccessorImpl
ciInstanceKlass sun/reflect/FieldAccessorImpl 0 0 56 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 10 1
instanceKlass sun/reflect/UnsafeStaticFieldAccessorImpl
ciInstanceKlass sun/reflect/UnsafeFieldAccessorImpl 0 0 229 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1
ciInstanceKlass sun/reflect/UnsafeStaticFieldAccessorImpl 0 0 38 8 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 1 1 1 1 12 12 12 12 12 9 9 10 10 10 1
ciInstanceKlass sun/reflect/CallerSensitive 0 0 17 1 1 1 1 1 1 1 1 100 100 100 1 1 1 1 1
instanceKlass java/lang/invoke/DirectMethodHandle
ciInstanceKlass java/lang/invoke/MethodHandle 1 1 424 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 7 100 7 100 100 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 1 1
staticfield java/lang/invoke/MethodHandle FORM_OFFSET J 16
staticfield java/lang/invoke/MethodHandle $assertionsDisabled Z 1
ciInstanceKlass java/lang/invoke/DirectMethodHandle 0 0 694 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 1 1 1 1 1 1 1
ciInstanceKlass java/lang/invoke/MemberName 1 1 644 3 3 3 3 3 3 3 3 3 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 100 100 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 100 100 100 100 100 100 7 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 1 1
staticfield java/lang/invoke/MemberName $assertionsDisabled Z 1
ciInstanceKlass java/lang/invoke/MethodHandleNatives 1 1 425 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 100 100 100 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 7 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 7 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 1
staticfield java/lang/invoke/MethodHandleNatives COUNT_GWT Z 1
staticfield java/lang/invoke/MethodHandleNatives $assertionsDisabled Z 1
ciInstanceKlass java/lang/invoke/LambdaForm 0 0 962 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 8 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 1 1 1 1 1 1
ciInstanceKlass java/lang/invoke/MethodType 0 0 591 8 8 8 8 8 8 8 8 8 8 8 8 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 5 0 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 1 1
ciInstanceKlass java/lang/BootstrapMethodError 0 0 38 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 1 1 12 12 12 12 12 10 10 10 10 10 1
instanceKlass java/lang/invoke/VolatileCallSite
instanceKlass java/lang/invoke/MutableCallSite
instanceKlass java/lang/invoke/ConstantCallSite
ciInstanceKlass java/lang/invoke/CallSite 0 0 311 8 8 8 8 8 8 8 8 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1
ciInstanceKlass java/lang/invoke/ConstantCallSite 0 0 42 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 1 1 12 12 12 12 12 12 9 9 10 10 10 10 10 1
ciInstanceKlass java/lang/invoke/MutableCallSite 0 0 57 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 1
ciInstanceKlass java/lang/invoke/VolatileCallSite 0 0 33 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 1 1 1 12 12 12 12 12 12 10 10 10 10 10 10 1
instanceKlass java/lang/StringBuilder
instanceKlass java/lang/StringBuffer
ciInstanceKlass java/lang/AbstractStringBuilder 1 1 312 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 100 100 100 100 100 100 100 7 100 7 100 100 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 1
ciInstanceKlass java/lang/StringBuffer 1 1 372 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 7 100 7 7 100 100 7 7 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 1 1
staticfield java/lang/StringBuffer serialPersistentFields [Ljava/io/ObjectStreamField; 3 [Ljava/io/ObjectStreamField;
ciInstanceKlass java/lang/StringBuilder 1 1 326 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 7 100 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1
ciInstanceKlass sun/misc/Unsafe 1 1 389 8 8 7 7 7 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 100 7 100 100 7 100 7 100 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1
staticfield sun/misc/Unsafe theUnsafe Lsun/misc/Unsafe; sun/misc/Unsafe
staticfield sun/misc/Unsafe ARRAY_BOOLEAN_BASE_OFFSET I 16
staticfield sun/misc/Unsafe ARRAY_BYTE_BASE_OFFSET I 16
staticfield sun/misc/Unsafe ARRAY_SHORT_BASE_OFFSET I 16
staticfield sun/misc/Unsafe ARRAY_CHAR_BASE_OFFSET I 16
staticfield sun/misc/Unsafe ARRAY_INT_BASE_OFFSET I 16
staticfield sun/misc/Unsafe ARRAY_LONG_BASE_OFFSET I 16
staticfield sun/misc/Unsafe ARRAY_FLOAT_BASE_OFFSET I 16
staticfield sun/misc/Unsafe ARRAY_DOUBLE_BASE_OFFSET I 16
staticfield sun/misc/Unsafe ARRAY_OBJECT_BASE_OFFSET I 16
staticfield sun/misc/Unsafe ARRAY_BOOLEAN_INDEX_SCALE I 1
staticfield sun/misc/Unsafe ARRAY_BYTE_INDEX_SCALE I 1
staticfield sun/misc/Unsafe ARRAY_SHORT_INDEX_SCALE I 2
staticfield sun/misc/Unsafe ARRAY_CHAR_INDEX_SCALE I 2
staticfield sun/misc/Unsafe ARRAY_INT_INDEX_SCALE I 4
staticfield sun/misc/Unsafe ARRAY_LONG_INDEX_SCALE I 8
staticfield sun/misc/Unsafe ARRAY_FLOAT_INDEX_SCALE I 4
staticfield sun/misc/Unsafe ARRAY_DOUBLE_INDEX_SCALE I 8
staticfield sun/misc/Unsafe ARRAY_OBJECT_INDEX_SCALE I 4
staticfield sun/misc/Unsafe ADDRESS_SIZE I 8
instanceKlass java/util/zip/ZipFile$ZipFileInputStream
instanceKlass java/io/FilterInputStream
instanceKlass java/io/FileInputStream
instanceKlass java/io/ByteArrayInputStream
ciInstanceKlass java/io/InputStream 1 1 61 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 5 0 100 100 100 100 100 100 100 7 12 12 12 12 12 10 10 10 10 10 10 10 1
ciInstanceKlass java/io/ByteArrayInputStream 1 1 62 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 100 100 100 7 1 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 1
ciInstanceKlass java/io/File 1 1 578 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 7 100 7 100 100 7 100 100 100 100 100 100 100 7 100 100 100 100 100 7 100 100 100 100 7 7 7 100 100 7 100 100 100 100 100 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 1 1 1 1
staticfield java/io/File fs Ljava/io/FileSystem; java/io/WinNTFileSystem
staticfield java/io/File separatorChar C 92
staticfield java/io/File separator Ljava/lang/String; "\"
staticfield java/io/File pathSeparatorChar C 59
staticfield java/io/File pathSeparator Ljava/lang/String; ";"
staticfield java/io/File PATH_OFFSET J 16
staticfield java/io/File PREFIX_LENGTH_OFFSET J 12
staticfield java/io/File UNSAFE Lsun/misc/Unsafe; sun/misc/Unsafe
staticfield java/io/File $assertionsDisabled Z 1
instanceKlass sun/misc/Launcher$ExtClassLoader
instanceKlass sun/misc/Launcher$AppClassLoader
ciInstanceKlass java/net/URLClassLoader 1 1 522 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 7 100 100 100 7 7 7 100 100 7 100 100 100 7 7 7 100 100 100 7 7 7 100 100 100 100 100 7 7 100 100 100 7 7 7 7 100 7 100 100 100 7 7 7 100 7 7 7 7 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11
ciInstanceKlass java/net/URL 1 1 457 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 7 7 100 100 100 100 100 7 100 7 7 7 100 100 100 100 7 100 100 7 100 7 100 7 100 7 7 7 100 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11
ciInstanceKlass java/util/jar/Manifest 1 1 230 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 7 7 7 100 100 7 100 7 100 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 1 1
ciInstanceKlass sun/misc/Launcher 1 1 218 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 100 100 100 100 100 100 100 100 7 100 7 100 7 7 100 7 7 100 7 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 1 1
ciInstanceKlass sun/misc/Launcher$AppClassLoader 1 1 201 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 7 7 100 7 100 7 7 100 100 7 100 7 100 7 100 7 7 7 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1
staticfield sun/misc/Launcher$AppClassLoader $assertionsDisabled Z 1
ciInstanceKlass sun/misc/Launcher$ExtClassLoader 1 1 209 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 7 100 7 7 7 7 7 100 7 100 100 100 7 7 7 7 7 7 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1
ciInstanceKlass java/security/CodeSource 1 1 322 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 100 100 100 100 7 100 100 100 100 7 100 7 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 1
ciInstanceKlass java/lang/StackTraceElement 0 0 98 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 100 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 1
instanceKlass java/nio/LongBuffer
instanceKlass java/nio/CharBuffer
instanceKlass java/nio/ByteBuffer
ciInstanceKlass java/nio/Buffer 1 1 103 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 100 100 7 100 7 100 100 100 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 1
ciInstanceKlass java/lang/Boolean 1 1 110 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 7 100 100 100 7 100 100 7 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 1
staticfield java/lang/Boolean TRUE Ljava/lang/Boolean; java/lang/Boolean
staticfield java/lang/Boolean FALSE Ljava/lang/Boolean; java/lang/Boolean
staticfield java/lang/Boolean TYPE Ljava/lang/Class; java/lang/Class
ciInstanceKlass java/lang/Character 1 1 459 3 3 3 3 3 3 3 3 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 0 5 0 100 100 100 100 100 100 100 7 100 7 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 1 1 1 1 1
staticfield java/lang/Character TYPE Ljava/lang/Class; java/lang/Class
staticfield java/lang/Character $assertionsDisabled Z 1
instanceKlass java/util/concurrent/atomic/AtomicInteger
instanceKlass java/lang/Long
instanceKlass java/lang/Integer
instanceKlass java/lang/Short
instanceKlass java/lang/Byte
instanceKlass java/lang/Double
instanceKlass java/lang/Float
ciInstanceKlass java/lang/Number 1 1 34 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 7 12 12 10 10 1
ciInstanceKlass java/lang/Float 1 1 169 3 3 3 4 4 4 4 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 4 4 5 0 7 100 100 7 100 100 100 100 100 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1
staticfield java/lang/Float TYPE Ljava/lang/Class; java/lang/Class
ciInstanceKlass java/lang/Double 1 1 223 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 5 0 5 0 5 0 5 0 5 0 6 0 6 0 6 0 6 0 6 0 6 0 6 0 7 100 7 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1
staticfield java/lang/Double TYPE Ljava/lang/Class; java/lang/Class
ciInstanceKlass java/lang/Byte 1 1 153 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 5 0 5 0 7 100 7 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1
staticfield java/lang/Byte TYPE Ljava/lang/Class; java/lang/Class
ciInstanceKlass java/lang/Short 1 1 159 3 3 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 5 0 5 0 7 100 100 100 100 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1
staticfield java/lang/Short TYPE Ljava/lang/Class; java/lang/Class
ciInstanceKlass java/lang/Integer 1 1 309 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 5 0 5 0 5 0 100 7 7 100 100 7 7 100 100 100 7 100 100 100 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1
staticfield java/lang/Integer TYPE Ljava/lang/Class; java/lang/Class
staticfield java/lang/Integer digits [C 36
staticfield java/lang/Integer DigitTens [C 100
staticfield java/lang/Integer DigitOnes [C 100
staticfield java/lang/Integer sizeTable [I 10
ciInstanceKlass java/lang/Long 1 1 356 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 100 100 7 100 100 100 7 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1
staticfield java/lang/Long TYPE Ljava/lang/Class; java/lang/Class
ciInstanceKlass java/lang/NullPointerException 1 1 21 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 1
ciInstanceKlass java/lang/ArithmeticException 1 1 21 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 1
ciInstanceKlass java/security/AccessController 1 1 187 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 7 100 7 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1
instanceKlass java/util/ArrayDeque
instanceKlass java/util/AbstractSet
instanceKlass java/util/AbstractList
ciInstanceKlass java/util/AbstractCollection 1 1 143 3 3 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 1
instanceKlass java/util/AbstractSequentialList
instanceKlass java/util/Collections$EmptyList
instanceKlass java/util/ArrayList
instanceKlass java/util/Vector
ciInstanceKlass java/util/AbstractList 1 1 167 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 7 7 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 1 1
instanceKlass java/util/Stack
ciInstanceKlass java/util/Vector 1 1 353 3 3 8 8 8 8 8 8 8 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 100 100 100 100 100 7 100 100 7 100 7 7 100 100 100 100 100 100 100 100 7 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 1 1 1 1 1
ciInstanceKlass java/util/Stack 1 1 56 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 7 1 1 1 1 12 12 12 12 12 12 12 10 10 10 10 10 10 10 10 1
ciInstanceKlass java/util/ArrayList 1 1 342 3 3 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 5 0 100 100 100 100 100 100 100 100 100 100 7 7 100 100 100 100 7 7 100 100 100 100 100 7 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 1 1 1 1 1
staticfield java/util/ArrayList EMPTY_ELEMENTDATA [Ljava/lang/Object; 0 [Ljava/lang/Object;
staticfield java/util/ArrayList DEFAULTCAPACITY_EMPTY_ELEMENTDATA [Ljava/lang/Object; 0 [Ljava/lang/Object;
instanceKlass java/util/LinkedHashMap
ciInstanceKlass java/util/HashMap 1 1 468 3 3 4 4 4 4 4 8 8 8 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 5 0 100 7 100 100 100 100 100 100 100 100 100 7 100 100 100 100 7 100 100 100 7 100 100 7 100 100 100 100 100 100 100 100 7 7 100 100 100 100 7 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 1 1 1 1 1 1 1 1 1 1 1 1 1
instanceKlass java/util/LinkedHashMap$Entry
ciInstanceKlass java/util/HashMap$Node 1 1 85 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 7 100 100 100 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 11 11 1
ciInstanceKlass java/security/PrivilegedExceptionAction 1 0 15 1 1 1 1 1 1 1 1 1 100 100 100 1 1
ciInstanceKlass java/io/PrintStream 1 1 282 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 100 100 7 100 100 7 7 7 100 100 100 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 1
ciInstanceKlass sun/misc/URLClassPath 1 1 481 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 8 100 100 100 100 7 100 100 7 100 100 7 100 100 100 100 100 7 100 7 7 100 7 7 100 7 100 100 100 7 100 7 100 100 7 100 100 7 7 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 1 1 1 1
staticfield sun/misc/URLClassPath JAVA_VERSION Ljava/lang/String; "1.8.0_51"
staticfield sun/misc/URLClassPath DEBUG Z 0
staticfield sun/misc/URLClassPath DEBUG_LOOKUP_CACHE Z 0
staticfield sun/misc/URLClassPath DISABLE_JAR_CHECKING Z 0
ciInstanceKlass sun/net/util/URLUtil 1 1 113 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 7 7 100 100 100 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1
ciInstanceKlass sun/misc/URLClassPath$3 1 1 91 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 7 7 100 7 7 7 7 100 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 1 1 1 1
instanceKlass sun/misc/URLClassPath$FileLoader
instanceKlass sun/misc/URLClassPath$JarLoader
ciInstanceKlass sun/misc/URLClassPath$Loader 1 1 123 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 7 100 100 100 100 100 100 100 100 100 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 1
ciInstanceKlass sun/misc/URLClassPath$JarLoader 1 1 444 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 7 7 100 7 7 7 100 100 7 100 100 100 7 7 100 100 7 100 100 7 7 7 100 7 7 100 7 7 100 7 7 100 7 100 7 100 7 7 7 100 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 1 1 1
staticfield sun/misc/URLClassPath$JarLoader zipAccess Lsun/misc/JavaUtilZipFileAccess; java/util/zip/ZipFile$1
ciInstanceKlass sun/misc/URLClassPath$FileLoader 1 1 125 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 100 7 7 100 100 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 1
instanceKlass java/io/FileNotFoundException
ciInstanceKlass java/io/IOException 1 1 27 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 1 12 12 12 12 10 10 10 10 1
ciInstanceKlass java/security/PrivilegedActionException 1 1 59 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 100 100 100 100 7 1 1 1 1 1 1 12 12 12 12 12 12 12 9 10 10 10 10 10 10 10 1
compile sun/misc/URLClassPath getNextLoader ([II)Lsun/misc/URLClassPath$Loader; -1 4 inline 9 0 -1 sun/misc/URLClassPath getNextLoader ([II)Lsun/misc/URLClassPath$Loader; 1 84 sun/misc/URLClassPath getLoader (I)Lsun/misc/URLClassPath$Loader; 2 13 java/util/ArrayList size ()I 2 33 java/util/Stack empty ()Z 3 1 java/util/Vector size ()I 2 123 java/util/ArrayList size ()I 2 190 java/util/ArrayList get (I)Ljava/lang/Object; 3 2 java/util/ArrayList rangeCheck (I)V 3 7 java/util/ArrayList elementData (I)Ljava/lang/Object;
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.aliyun.odps.spark.sparksql;
import com.aliyun.odps.Odps;
import com.aliyun.odps.cupid.CupidSession;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.types.*;
import java.util.ArrayList;
import java.util.List;
import org.apache.spark.sql.types.StructField;
public class JavaSparkSQL {
public static void main(String[] args) {
SparkSession spark = SparkSession
.builder()
.appName("SparkSQL-on-MaxCompute")
.config("spark.sql.broadcastTimeout", 20 * 60)
.config("spark.sql.crossJoin.enabled", true)
.config("odps.exec.dynamic.partition.mode", "nonstrict")
.getOrCreate();
JavaSparkContext sparkContext = new JavaSparkContext(spark.sparkContext());
String tableName = "mc_test_table";
String tableNameCopy = "mc_test_table_copy";
String ptTableName = "mc_test_pt_table";
spark.sql("DROP TABLE IF EXISTS " + tableName);
spark.sql("DROP TABLE IF EXISTS " + tableNameCopy);
spark.sql("DROP TABLE IF EXISTS " + ptTableName);
spark.sql("CREATE TABLE " + tableName + " (name STRING, num BIGINT)");
spark.sql("CREATE TABLE " + ptTableName + " (name STRING, num BIGINT) PARTITIONED BY (pt1 STRING, pt2 STRING)");
List<Integer> data = new ArrayList<Integer>();
for (int i = 0; i < 100; i++) {
data.add(i);
}
JavaRDD<Row> dfRDD = sparkContext.parallelize(data, 2).map(new Function<Integer, Row>() {
public Row call(Integer i) {
return RowFactory.create(
"name-" + i.toString(),
Long.valueOf(i));
}
});
JavaRDD<Row> ptDfRDD = sparkContext.parallelize(data, 2).map(new Function<Integer, Row>() {
public Row call(Integer i) {
return RowFactory.create(
"name-" + i.toString(),
Long.valueOf(i),
"2018",
"0601");
}
});
List<StructField> structFilelds = new ArrayList<StructField>();
structFilelds.add(DataTypes.createStructField("name", DataTypes.StringType, true));
structFilelds.add(DataTypes.createStructField("num", DataTypes.LongType, true));
Dataset<Row> df = spark.createDataFrame(dfRDD, DataTypes.createStructType(structFilelds));
structFilelds.add(DataTypes.createStructField("pt1", DataTypes.StringType, true));
structFilelds.add(DataTypes.createStructField("pt2", DataTypes.StringType, true));
Dataset<Row> ptDf = spark.createDataFrame(ptDfRDD, DataTypes.createStructType(structFilelds));
// 写 普通表
df.write().insertInto(tableName); // insertInto语义
df.write().mode("overwrite").insertInto(tableName);// insertOverwrite语义
// 读 普通表
Dataset<Row> rdf = spark.sql("select name, num from " + tableName);
System.out.println("rdf count: " + rdf.count());
rdf.printSchema();
//create table as select
spark.sql("CREATE TABLE " + tableNameCopy + " AS SELECT name, num FROM " + tableName);
spark.sql("SELECT * FROM " + tableNameCopy).show();
// 写 分区表
// DataFrameWriter 无法指定分区写入 需要通过临时表再用SQL写入特定分区
df.registerTempTable(ptTableName + "_tmp_view");
spark.sql("insert into table " + ptTableName + " partition (pt1='2018', pt2='0601') select * from " + ptTableName + "_tmp_view");
spark.sql("insert overwrite table " + ptTableName + " partition (pt1='2018', pt2='0601') select * from " + ptTableName + "_tmp_view");
ptDf.write().insertInto(ptTableName);// 动态分区 insertInto语义
ptDf.write().mode("overwrite").insertInto(ptTableName); // 动态分区 insertOverwrite语义
// 读 分区表
Dataset<Row> rptdf = spark.sql("select name, num, pt1, pt2 from " + ptTableName + " where pt1 = '2018' and pt2 = '0601'");
System.out.println("rptdf count: " + rptdf.count());
rptdf.printSchema();
Odps odps = CupidSession.get().odps();
System.out.println(odps.tables().get(ptTableName).getPartitions().size());
System.out.println(odps.tables().get(ptTableName).getPartitions().get(0).getPartitionSpec());
}
}
\ No newline at end of file
package com.aliyun.odps.spark.utils;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.appender.ConsoleAppender;
import org.apache.logging.log4j.core.config.AppenderRef;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.LoggerConfig;
import org.apache.logging.log4j.core.layout.PatternLayout;
public class ConfigLog4j2 {
private static final LoggerContext CONTEXT;
public static final String DEFAULT_APPENDER = "MY_STDOUT";
public static final String
DEFAULT_PATTERN =
"%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger - %msg %ex %n";
static {
CONTEXT = (LoggerContext) LogManager.getContext(false);
}
/**
* @Description: add specific logger for specific package
* @Param: packageName, such as com.xx.yy
* @return: void
* @Author: lcj265802@alibaba-inc.com
* @Date: 2020/12/29
*/
public static void initPackageLogger(String packageName) {
LoggerContext loggerContext = CONTEXT;
Configuration config = loggerContext.getConfiguration();
ConsoleAppender.Builder builder = ConsoleAppender.newBuilder();
builder.setName(DEFAULT_APPENDER);
builder.setLayout(PatternLayout.newBuilder().withPattern(DEFAULT_PATTERN).build());
Appender stdoutAppender = builder.setTarget(ConsoleAppender.Target.SYSTEM_OUT).build();
stdoutAppender.start();
config.addAppender(stdoutAppender);
AppenderRef ref = AppenderRef.createAppenderRef(DEFAULT_APPENDER, null, null);
AppenderRef[] refs = new AppenderRef[]{ref};
LoggerConfig
loggerConfig =
LoggerConfig.createLogger(false, Level.INFO, packageName,
"true", refs, null, config, null);
loggerConfig.addAppender(stdoutAppender, null, null);
config.addLogger(packageName, loggerConfig);
loggerContext.updateLoggers();
}
}
# -*- coding: utf-8 -*-
import sys
from pyspark.sql import SparkSession
try:
# for python 2
reload(sys)
sys.setdefaultencoding('utf8')
except:
# python 3 not needed
pass
if __name__ == '__main__':
spark = SparkSession.builder\
.appName("spark write df to oss")\
.getOrCreate()
data = [i for i in range(0, 100)]
df = spark.sparkContext.parallelize(data, 2).map(lambda s: ("name-%s" % s, s)).toDF("name: string, num: int")
df.show(n=10)
# write to oss
pathout = 'oss://yeshan01/test.csv'
df.write.csv(pathout)
# -*- coding: utf-8 -*-
import sys
from pyspark.sql import SparkSession
try:
# for python 2
reload(sys)
sys.setdefaultencoding('utf8')
except:
# python 3 not needed
pass
if __name__ == '__main__':
spark = SparkSession.builder\
.appName("spark sql")\
.config("spark.sql.broadcastTimeout", 20 * 60)\
.config("spark.sql.crossJoin.enabled", True)\
.config("odps.exec.dynamic.partition.mode", "nonstrict")\
.getOrCreate()
tableName = "mc_test_table"
ptTableName = "mc_test_pt_table"
data = [i for i in range(0, 100)]
# Drop Create
spark.sql("DROP TABLE IF EXISTS %s" % tableName)
spark.sql("DROP TABLE IF EXISTS %s" % ptTableName)
spark.sql("CREATE TABLE %s (name STRING, num BIGINT)" % tableName)
spark.sql("CREATE TABLE %s (name STRING, num BIGINT) PARTITIONED BY (pt1 STRING, pt2 STRING)" % ptTableName)
df = spark.sparkContext.parallelize(data, 2).map(lambda s: ("name-%s" % s, s)).toDF("name: string, num: int")
pt_df = spark.sparkContext.parallelize(data, 2).map(lambda s: ("name-%s" % s, s, "2018", "0601")).toDF("name: string, num: int, pt1: string, pt2: string")
# 写 普通表
df.write.insertInto(tableName) # insertInto语义
df.write.insertInto(tableName, True) # insertOverwrite语义
# 写 分区表
# DataFrameWriter 无法指定分区写入 需要通过临时表再用SQL写入特定分区
df.createOrReplaceTempView("%s_tmp_view" % ptTableName)
spark.sql("insert into table %s partition (pt1='2018', pt2='0601') select * from %s_tmp_view" % (ptTableName, ptTableName))
spark.sql("insert overwrite table %s partition (pt1='2018', pt2='0601') select * from %s_tmp_view" % (ptTableName, ptTableName))
pt_df.write.insertInto(ptTableName) # 动态分区 insertInto语义
pt_df.write.insertInto(ptTableName, True) # 动态分区 insertOverwrite语义
# 读 普通表
rdf = spark.sql("select name, num from %s" % tableName)
print("rdf count, %s\n" % rdf.count())
rdf.printSchema()
# 读 分区表
rptdf = spark.sql("select name, num, pt1, pt2 from %s where pt1 = '2018' and pt2 = '0601'" % ptTableName)
print("rptdf count, %s" % (rptdf.count()))
rptdf.printSchema()
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.aliyun.odps.spark
import org.apache.spark.sql.SparkSession
import scala.math.random
object SparkPi {
def main(args: Array[String]) {
val spark = SparkSession
.builder()
.appName("SparkPi")
.config("spark.master", "local[4]") // 需设置spark.master为local[N]才能直接运行,N为并发数。
.getOrCreate()
val sc = spark.sparkContext
try {
val slices = if (args.length > 0) args(0).toInt else 2
val n = math.min(100000L * slices, Int.MaxValue).toInt // avoid overflow
val count = sc.parallelize(1 until n, slices).map { i =>
val x = random * 2 - 1
val y = random * 2 - 1
if (x * x + y * y < 1) 1 else 0
}.reduce(_ + _)
println("Pi is roughly " + 4.0 * count / n)
} finally {
sc.stop()
}
}
}
\ No newline at end of file
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.aliyun.odps.spark
import org.apache.spark.sql.SparkSession
object WordCount {
def main(args: Array[String]) {
val spark = SparkSession
.builder()
.appName("WordCount")
.getOrCreate()
val sc = spark.sparkContext
try {
sc.parallelize(1 to 100, 10).map(word => (word, 1)).reduceByKey(_ + _, 10).take(100).foreach(println)
} finally {
sc.stop()
}
}
}
\ No newline at end of file
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.aliyun.odps.spark.graphx
import org.apache.spark.graphx.{Edge, Graph, VertexId}
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SparkSession
object PageRank {
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder()
.appName("PageRank")
.getOrCreate()
val sc = spark.sparkContext
// build vertices
val users: RDD[(VertexId, Array[String])] = sc.parallelize(List(
"1,BarackObama,Barack Obama",
"2,ladygaga,Goddess of Love",
"3,jeresig,John Resig",
"4,justinbieber,Justin Bieber",
"6,matei_zaharia,Matei Zaharia",
"7,odersky,Martin Odersky",
"8,anonsys"
).map(line => line.split(",")).map(parts => (parts.head.toLong, parts.tail)))
// build edges
val followers: RDD[Edge[Double]] = sc.parallelize(Array(
Edge(2L, 1L, 1.0),
Edge(4L, 1L, 1.0),
Edge(1L, 2L, 1.0),
Edge(6L, 3L, 1.0),
Edge(7L, 3L, 1.0),
Edge(7L, 6L, 1.0),
Edge(6L, 7L, 1.0),
Edge(3L, 7L, 1.0)
))
// build graph
val followerGraph: Graph[Array[String], Double] = Graph(users, followers)
// restrict the graph to users with usernames and names
val subgraph = followerGraph.subgraph(vpred = (vid, attr) => attr.size == 2)
// compute PageRank
val pageRankGraph = subgraph.pageRank(0.001)
// get attributes of the top pagerank users
val userInfoWithPageRank = subgraph.outerJoinVertices(pageRankGraph.vertices) {
case (uid, attrList, Some(pr)) => (pr, attrList.toList)
case (uid, attrList, None) => (0.0, attrList.toList)
}
println(userInfoWithPageRank.vertices.top(5)(Ordering.by(_._2._1)).mkString("\n"))
}
}
package com.aliyun.odps.spark.log4j2
import org.apache.logging.log4j
import org.apache.logging.log4j.LogManager
trait Logger {
val log: log4j.Logger = LogManager.getLogger(this.getClass)
log
}
package com.aliyun.odps.spark.log4j2
import com.aliyun.odps.spark.utils.ConfigLog4j2
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SparkSession
object SimpleWordCount extends Logger {
def main(args: Array[String]): Unit = {
ConfigLog4j2.initPackageLogger("com.aliyun.odps.spark.examples.log4j2")
val spark: SparkSession = SparkSession
.builder()
.appName("WordCount")
.getOrCreate()
log.info("My Test!")
val wordList = List("Hello", "World", "Hello")
val rdd: RDD[String] = spark.sparkContext.parallelize(Seq(wordList: _*)).cache()
val resultRDD: RDD[(String, Int)] = rdd.map(w => (w, 1)).reduceByKey(_ + _)
resultRDD.collect().foreach(v => {
log.info(s"${v._1} has num ${v._2}")
})
spark.stop()
}
}
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.aliyun.odps.spark.mllib
import org.apache.spark.mllib.clustering.KMeans._
import org.apache.spark.mllib.clustering.{KMeans, KMeansModel}
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.sql.SparkSession
object KmeansModelSaveToOss {
val modelOssDir = "oss://bucket/kmeans-model"
def main(args: Array[String]) {
//1. train and save the model
val spark = SparkSession
.builder()
.config("spark.hadoop.fs.oss.credentials.provider", "org.apache.hadoop.fs.aliyun.oss.AliyunStsTokenCredentialsProvider")
.config("spark.hadoop.fs.oss.ststoken.roleArn", "acs:ram::****:role/aliyunodpsdefaultrole")
.config("spark.hadoop.fs.oss.endpoint", "oss-cn-hangzhou-zmf.aliyuncs.com")
.appName("KmeansModelSaveToOss")
.getOrCreate()
val sc = spark.sparkContext
val points = Seq(
Vectors.dense(0.0, 0.0),
Vectors.dense(0.0, 0.1),
Vectors.dense(0.1, 0.0),
Vectors.dense(9.0, 0.0),
Vectors.dense(9.0, 0.2),
Vectors.dense(9.2, 0.0)
)
val rdd = sc.parallelize(points, 3)
val initMode = K_MEANS_PARALLEL
val model = KMeans.train(rdd, k = 2, maxIterations = 2, runs = 1, initMode)
val predictResult1 = rdd.map(feature => "cluster id: " + model.predict(feature) + " feature:" + feature.toArray.mkString(",")).collect
println("modelOssDir=" + modelOssDir)
model.save(sc, modelOssDir)
//2. predict from the oss model
val modelLoadOss = KMeansModel.load(sc, modelOssDir)
val predictResult2 = rdd.map(feature => "cluster id: " + modelLoadOss.predict(feature) + " feature:" + feature.toArray.mkString(",")).collect
assert(predictResult1.size == predictResult2.size)
predictResult2.foreach(result2 => assert(predictResult1.contains(result2)))
}
}
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.aliyun.odps.spark.oss
import org.apache.spark.{SparkConf, SparkContext}
object JindoFsDemo {
def main(args: Array[String]): Unit = {
val aliyunUid : String = args(0)
val role : String = args(1)
val bucket : String = args(2)
val ossPath : String = args(3)
// using ram-role assume
val conf = new SparkConf()
.setAppName("jindo-fs-demo")
.set("spark.hadoop.fs.AbstractFileSystem.oss.impl", "com.aliyun.emr.fs.oss.OSS")
.set("spark.hadoop.fs.oss.impl", "com.aliyun.emr.fs.oss.JindoOssFileSystem")
.set("spark.hadoop.fs.oss.endpoint", "oss-cn-hangzhou-internal.aliyuncs.com")
.set("spark.hadoop.fs.jfs.cache.oss.credentials.provider", "com.aliyun.emr.fs.auth.CustomCredentialsProvider")
.set("spark.hadoop.aliyun.oss.provider.url", s"http://localhost:10011/sts-token-info?user_id=${aliyunUid}&role=${role}")
//using access-key-id/access-key-secret
// val conf = new SparkConf()
// .setAppName("jindo-fs-demo")
// .set("spark.hadoop.fs.AbstractFileSystem.oss.impl", "com.aliyun.emr.fs.oss.OSS")
// .set("spark.hadoop.fs.oss.impl", "com.aliyun.emr.fs.oss.JindoOssFileSystem")
// .set("spark.hadoop.fs.oss.endpoint", "oss-cn-hangzhou-internal.aliyuncs.com")
// .set("spark.hadoop.fs.oss.accessKeyId", "xxx")
// .set("spark.hadoop.fs.oss.accessKeySecret", "xxx")
val sc = new SparkContext(conf)
try {
read_oss_dir(sc, "demo", s"oss://${bucket}/${ossPath}")
} finally {
sc.stop()
}
}
/**
* compute cost time using jindo sdk
*/
def read_oss_dir(sc: SparkContext, job_des:String, ossPath: String): Unit = {
val startTime: Long = System.currentTimeMillis()
val inputData = sc.textFile(ossPath, 20)
val cnt = inputData.count
val endTime:Long = System.currentTimeMillis()
val cost:Long = endTime - startTime
println(s"job:$job_des, count:$cnt, consume:$cost")
}
}
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.aliyun.odps.spark.oss
import org.apache.spark.sql.SparkSession
object SparkUnstructuredDataCompute {
def main(args: Array[String]) {
val spark = SparkSession
.builder()
.config("spark.hadoop.fs.oss.credentials.provider", "org.apache.hadoop.fs.aliyun.oss.AliyunStsTokenCredentialsProvider")
.config("spark.hadoop.fs.oss.ststoken.roleArn", "acs:ram::****:role/aliyunodpsdefaultrole")
.config("spark.hadoop.fs.oss.endpoint", "oss-cn-hangzhou-zmf.aliyuncs.com")
.appName("SparkUnstructuredDataCompute")
.getOrCreate()
val sc = spark.sparkContext
try {
val pathIn = "oss://bucket/inputdata/"
val inputData = sc.textFile(pathIn, 5)
val cnt = inputData.count
println(s"count: $cnt")
} finally {
sc.stop()
}
}
}
\ No newline at end of file
package com.aliyun.odps.spark.sparksql
import config.MyConfigSession
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, Dataset, Row, SparkSession}
import org.apache.spark.sql.expressions.{Window, WindowSpec}
import org.apache.spark.sql.functions.lag
import org.apache.spark.storage.StorageLevel
import utils.{DateUtils, StringUtils, UseUtil}
import scala.collection.mutable.ListBuffer
/**
*
* 处理埋点流量表,导入到DW层pica_dw.dw_fact_log_session
*
* @Author weicheng.mao
* @Date 2022/02/23 14:23
* @Version 1.0
*/
object SessionProcess {
def apply(): SessionProcess = new SessionProcess()
def main(args: Array[String]): Unit = {
var scnData: String = DateUtils.getYesterdayDate
if(args.length>=1){
scnData = args(0)
}
println(s"scnData=${scnData}")
//设置任务开始时间,格式是2019-09-12 14:03:30
val startTime: String = DateUtils.getTodayTime
//存储SQL中的参数
val insertArr: Array[String] = Array[String](scnData, startTime)
try {
val sessionProcess: SessionProcess = SessionProcess()
//step1:获取源数据,重新分区,产生shuffle,Spark读Hive默认的分区数太少,并对数据去重
var sourceDF: DataFrame = sessionProcess.sparkSession.sql(MyConfigSession.SOURCE_SQL+s" and created_day='${scnData}'").repartition(200).distinct()
sourceDF.show()
var conditionGroup = List( "<='2'","between '3' and '5'","between '6' and '8'","between '9' and 'b'",">='c'" )
var dataCount = 0
var index = 0
sourceDF.persist(StorageLevel.MEMORY_AND_DISK_SER)
for(condition <- conditionGroup){
index += 1
val slideDF = sourceDF.where(s" SUBSTRING(pseudo_session,1,1) ${condition}").repartition(100)
//step2:抽取出当天pseudo_session对应的非空的device_token,doctor_id,mobile,补充到对应的pseudo_session下这几项为空的记录中
val groupRdd = slideDF.rdd.groupBy(r => r.getAs[String]("pseudo_session"))
val resRdd = groupRdd.flatMap(g => {
val pseudo_session = g._1
val resList: ListBuffer[Row] = new ListBuffer[Row]()
var rowList = g._2
rowList = rowList.toList.sortWith((x,y)=>x.getAs[String]("created") > y.getAs[String]("created"))//按created由大到小排序
var thisDeviceToken = ""
var thisDoctorId = "0"
var thisMobile = ""
rowList.foreach(row => {
var deviceToken = row.getAs[String]("device_token")
var doctorId = row.getAs[String]("doctor_id")
var mobile = row.getAs[String]("mobile")
val created = row.getAs[String]("created")
if(deviceToken!=null && !deviceToken.equals("") ){
thisDeviceToken = deviceToken
}else {
deviceToken = thisDeviceToken
}
if(doctorId!=null && !doctorId.equals("") && !doctorId.equals("0") ){
thisDoctorId = doctorId
}else {
doctorId = thisDoctorId
}
if(mobile!=null && !mobile.equals("") ){
thisMobile = mobile
}else {
mobile = thisMobile
}
resList += (Row(row.getAs[String]("pseudo_session"),
doctorId,
mobile,
deviceToken,
row.getAs[String]("user_token_tourist"),
row.getAs[String]("class_name"),
row.getAs[String]("view_path"),
row.getAs[String]("action"),
row.getAs[String]("component_tag"),
row.getAs[String]("app_version"),
row.getAs[String]("device_type"),
row.getAs[String]("device_brand"),
row.getAs[String]("device_model"),
row.getAs[String]("network_type"),
row.getAs[String]("created")))
})
resList.iterator
})
import sessionProcess.sparkSession.implicits._
//step3:根据映射表来进行action_type和class_name数据过滤
val resDF = sessionProcess.sparkSession.createDataFrame(resRdd,sourceDF.schema)
resDF.persist(StorageLevel.MEMORY_AND_DISK_SER)
println("resDF.show=======>")
// resDF.show()
val data: RDD[Row] = resDF.rdd.mapPartitions(sessionProcess.filterRows)
println("---------------------------------------process columns-------------------------------------------")
val baseDF: DataFrame = data.mapPartitions(sessionProcess.processColumns)
.toDF("pseudo_session", "user_id", "mobile", "device_token", "user_token", "view_class", "view_path",
"action_type", "component_tag", "menu_code", "action_code", "position", "label_value","label_class","module_class1","module_class2", "app_version",
"device_type", "device_brand", "device_model", "device_system", "net_type", "created_time", "date_time")
println("----------------------------------compute session id---------------------------------------------")
val sessionIdDF: DataFrame = sessionProcess.getSessionId(baseDF,sessionProcess)
//默认缓存级别是:MEMORY_AND_DISK
sessionIdDF.persist(StorageLevel.MEMORY_AND_DISK_SER)
println("sessionIdDF.show=======>")
println("-------------------------------match user_id 逻辑-------------------------------------------------")
val dwFactLogSession: DataFrame = sessionProcess.matchUserId(sessionIdDF,sessionProcess.sparkSession,scnData)
println("dwFactLogSession.show=======>")
println("-----------------create view fact_log_session and load to dw_fact_log_session--------------------")
dwFactLogSession.createOrReplaceTempView("fact_log_session")
var insertMode = "insert overwrite"
if(index!=1){
insertMode = "insert into"
}
val loadDataSql =
s"${insertMode} table ${MyConfigSession.HIVE_TABLE1} partition(created_day='${scnData}') select * from fact_log_session distribute by rand()"
sessionProcess.sparkSession.sql(loadDataSql)
dataCount = dataCount + dwFactLogSession.count().toInt
}
println("----------------------------------update task record table---------------------------------------")
sessionProcess.sparkSession.stop()
} catch {
case e: Exception => {
println(s"-----------------------------------任务异常---------------------------------------------------")
e.printStackTrace()
}
}
}
}
class SessionProcess extends java.io.Serializable{
def getSparkSession(appName: String): SparkSession = {
// val sparkSession = SparkSession
// .builder()
// .appName("SparkPi")
// .config("spark.master", "local[1]") // 需设置spark.master为local[N]才能直接运行,N为并发数。
// .config("spark.hadoop.odps.project.name", "pica")
// .config("spark.hadoop.odps.access.id", "LTAI5tQEnb9VREcPdDAR32bg")
// .config("spark.hadoop.odps.access.key", "RYazt1JIYZnRcEdlntarZ1Ov21zoNi")
// .config("spark.hadoop.odps.end.point", "http://service.cn.maxcompute.aliyun.com/api")
// .config("spark.sql.catalogImplementation", "odps")
// .getOrCreate()
val sparkSession = SparkSession
.builder()
.config("spark.hadoop.odps.project.name", "pica")
.appName("SessionProcess")
.getOrCreate()
sparkSession
}
val sparkSession: SparkSession = getSparkSession("SessionProcess")
//获取符合要求的actionType广播变量
val actionTypeBroad =
UseUtil.getBroadcast(sparkSession, MyConfigSession.ACTION_TYPE_SQL, "action_type", "is_valid")
//获取clasName广播变量
val classNameBroad =
UseUtil.getBroadcast(sparkSession, MyConfigSession.CLASS_NAME_SQL, "class_name", "is_valid")
//获取menu_code广播变量
val menuCodeBroad =
UseUtil.getBroadcast(sparkSession, MyConfigSession.MENU_CODE_SQL, "view_path", "menu_code")
//获取actionCategory变量
val actionCategory =
UseUtil.getBroadcast(sparkSession,MyConfigSession.ACTION_CATEGORY_SQL,"action_type","action_category")
//定义函数式变量,过滤映射表数据
val filterRows: Iterator[Row] => Iterator[Row] = (rows: Iterator[Row]) => {
val rowList: ListBuffer[Row] = new ListBuffer[Row]()
val actionTypeMap: Map[String, String] = actionTypeBroad.value
val classNameMap: Map[String, String] = classNameBroad.value
//关联到action_category的映射表广播变量
val actionCategoryMap: Map[String, String] = actionCategory.value
rows.toList.foreach(row => {
//筛选action的条件
val action: String = StringUtils.getNotNullString(row.getAs[String]("action"))
//说明该action类型即为所要的
if (actionTypeMap.getOrElse(action, "-1").equals("1")) {
//将action转化为映射表中对应的标准actionCategory
val action_type: String = actionCategoryMap.getOrElse(action,"ACTION")
// val action_type = UseUtil.getActionType(action)
//action为其中的任何一个
if (action_type.equals("ACTION_CLICK") || action_type.equals("ACTION_EXPOSE")) {
//判断 component_tag 必须要包含 "#"
if (row.getAs[String]("component_tag") != null
&& row.getAs[String]("component_tag").contains("#")) {
rowList += row
}
} else if (action_type.equals("ACTION_VIEW")) {
rowList += row
//非上述三种action_type,那么需要过滤掉映射表中class_name为"0"对应的那些数据
} else if (row.getAs[String]("class_name") != null
&& !classNameMap.getOrElse(row.getAs[String]("class_name"), "-1").equals("0")) {
rowList += row
}
}
})
rowList.iterator
}
//处理字段,得到需要的字段值
val processColumns = (rows: Iterator[Row]) => {
// val baseList = new ListBuffer[(String, String, String, String, String, String, String, String, String,
// String, String, String, String, String, String, String, String, String, String, String, String,String,String,String)]()
val baseList = new ListBuffer[SessionLog]()
//关联到menu_code的映射表广播变量
val path_menu: Map[String, String] = menuCodeBroad.value
//关联到action_category的映射表广播变量
val actionCategoryMap: Map[String, String] = actionCategory.value
rows.toList.foreach(row => {
//1.获取网络类型
//2G,3G,4G,2G/3G/4G,WIFI,WLAN,或者为空字符串
val net_type = UseUtil.netTypeMatch(StringUtils.getNotNullString(row.getAs[String]("network_type")))
//2.修改action类型
var action_type: String = ""
if (row.getAs[String]("action") !=null) {
action_type = actionCategoryMap.getOrElse(row.getAs[String]("action"),"ACTION")
}
//3.拆分 component_tag字段
val component_tag: String = StringUtils.getNotNullString(row.getAs[String]("component_tag"))
var menu_code: String = ""
var action_code: String = ""
var position: String = ""
var label_value: String = ""
var label_class:String = ""
var module_class1:String=""
var module_class2:String=""
//将符合要求的component_tag进行切割,获取 aciton_code,label_value
if (component_tag.contains("#")) {
//按照#号切割
val strs: Array[String] = component_tag.split("#")
strs.length match {
case 1 => {
menu_code = strs(0)
}
case 2 => {
menu_code = strs(0)
action_code = strs(1)
}
case 3 => {
menu_code = strs(0)
action_code = strs(1)
position = strs(2)
}
case 4 => {
menu_code = strs(0)
action_code = strs(1)
position = strs(2)
label_value = strs(3).substring(0,math.min(250,strs(3).length))
}
case 5 => {
menu_code = strs(0)
action_code = strs(1)
position = strs(2)
label_value = strs(3).substring(0,math.min(250,strs(3).length))
label_class = strs(4)
}
case 6 => {
menu_code = strs(0)
action_code = strs(1)
position = strs(2)
label_value = strs(3).substring(0,math.min(250,strs(3).length))
label_class = strs(4)
module_class1=strs(5)
}
case _ => {
menu_code = strs(0)
action_code = strs(1)
position = strs(2)
label_value = strs(3).substring(0,math.min(250,strs(3).length))
label_class = strs(4)
module_class1=strs(5)
module_class2=strs(6)
}
}
}
//匹配menu_code:如果上述截取出来的menu_code为(''||null||0||length(menu_code)>3 ) and action is ACTION_VIEW
if ((menu_code.equals("")|| menu_code.equals("null") || menu_code.equals("0") || (menu_code.length> 3 && !component_tag.contains("#") ))
&& action_type.equals("ACTION_VIEW")) {
menu_code = "0" //关联不上的显示为0
import scala.util.control.Breaks._
breakable {
//利用menu_code映射表匹配
for (tuple <- path_menu) {
//源数据view_path的字符串包含映射表view_path的字符串
if (StringUtils.getNotNullString(row.getAs[String]("view_path")).contains(tuple._1)) {
//满足条件后,修改源数据的menu_code
menu_code = tuple._2
println("--------------------menu_code match successfully-----------------------")
//结束遍历
break()
}
}
//经过上述匹配,如果menu_code仍然为空串,那么置为component_tag字段一样
if (menu_code.equals("")) {
menu_code = component_tag
}
}
}
//一行数据添加到List中
baseList += SessionLog(StringUtils.getNotNullString(row.getAs[String]("pseudo_session")),
StringUtils.getNotNullString(row.getAs[String]("doctor_id")),
StringUtils.getNotNullString(row.getAs[String]("mobile")),
StringUtils.getNotNullString(row.getAs[String]("device_token")),
StringUtils.getNotNullString(row.getAs[String]("user_token_tourist")),
StringUtils.getNotNullString(row.getAs[String]("class_name")),
StringUtils.getNotNullString(row.getAs[String]("view_path")),
action_type, component_tag, menu_code, action_code, position, label_value,label_class,module_class1,module_class2,
StringUtils.getNotNullString(row.getAs[String]("app_version")),
StringUtils.getNotNullString(row.getAs[String]("device_type")),
StringUtils.getNotNullString(row.getAs[String]("device_brand")),
StringUtils.getNotNullString(row.getAs[String]("device_model")),
"", net_type,
StringUtils.getNotNullString(row.getAs[String]("created")),
DateUtils.milliSecondsFormatTime(StringUtils.getNotNullString(row.getAs[String]("created"))))
})
baseList.iterator
}
//按照time_gap 切割session,计算session_id
val computeSessionId = (tuple: (String, Iterable[Row])) => {
//先按照 pseudo_session 的值命名 sessionID
val sessionID: String = tuple._1
val rowList: Iterable[Row] = tuple._2
//定义一个累加量
var count: Int = 0
//存储一行的数据
// val list = new ListBuffer[(String, String, String, String, String, String, String, String, String,
// String, String, String, String, String, String, String, String, String, String, String, String, String,String, String)]()
val list = new ListBuffer[SessionLog]()
rowList.toList.foreach(row => {
val created: String = StringUtils.getNotNullString(row.getAs[String]("created_time"))
val refer_created: String = StringUtils.getNotNullString(row.getAs[String]("refer_created"))
val time_diff: Long = created.toLong - refer_created.toLong
//相邻的时间差小于等于30分钟,就是同一个 sessionID
if (time_diff > MyConfigSession.SESSION_GAP) {
count = count + 1
}
//添加到List
list += SessionLog(sessionID + count,
StringUtils.getNotNullString(row.getAs[String]("user_id")),
StringUtils.getNotNullString(row.getAs[String]("mobile")),
StringUtils.getNotNullString(row.getAs[String]("device_token")),
StringUtils.getNotNullString(row.getAs[String]("user_token")),
StringUtils.getNotNullString(row.getAs[String]("view_class")),
StringUtils.getNotNullString(row.getAs[String]("view_path")),
StringUtils.getNotNullString(row.getAs[String]("action_type")),
StringUtils.getNotNullString(row.getAs[String]("component_tag")),
StringUtils.getNotNullString(row.getAs[String]("menu_code")),
StringUtils.getNotNullString(row.getAs[String]("action_code")),
StringUtils.getNotNullString(row.getAs[String]("position")),
StringUtils.getNotNullString(row.getAs[String]("label_value")),
StringUtils.getNotNullString(row.getAs[String]("label_class")),
StringUtils.getNotNullString(row.getAs[String]("module_class1")),
StringUtils.getNotNullString(row.getAs[String]("module_class2")),
StringUtils.getNotNullString(row.getAs[String]("app_version")),
StringUtils.getNotNullString(row.getAs[String]("device_type")),
StringUtils.getNotNullString(row.getAs[String]("device_brand")),
StringUtils.getNotNullString(row.getAs[String]("device_model")),
StringUtils.getNotNullString(row.getAs[String]("device_system")),
StringUtils.getNotNullString(row.getAs[String]("net_type")),
created, StringUtils.getNotNullString(row.getAs[String]("date_time")))
})
list
}
/**
* @Description 按照TimeGap切割session,重命名session_id
* @param dataFrame 要处理的DataFrame
* @param sessionProcess SessionProcess对象,包含SparkSession 环境
* @return org.apache.spark.sql.Dataset<org.apache.spark.sql.Row>
**/
def getSessionId(dataFrame: DataFrame,sessionProcess: SessionProcess):DataFrame = {
import sessionProcess.sparkSession.implicits._
//先按照 pseudo_session 分组,然后按照 created 排序,组件一个窗口
val pSessionWinSpec: WindowSpec = Window.partitionBy("pseudo_session").orderBy("created_time")
//增加一个字段 refer_created ,这个字段的值是上一条记录 created 字段的值,方便后面通过两者差值计算出 session_id
val rcreDF: DataFrame =
dataFrame.withColumn("refer_created", lag(dataFrame("created_time"), 1).over(pSessionWinSpec))
//执行COALESCE,目的是为了去掉 refer_created 为Null的值
val coalesceDF: DataFrame = rcreDF.selectExpr(
"pseudo_session", "user_id", "mobile", "device_token",
"user_token", "view_class", "view_path", "action_type",
"component_tag", "menu_code", "action_code", "position", "label_value","label_class","module_class1","module_class2",
"app_version", "device_type", "device_brand", "device_model",
"device_system", "net_type", "created_time", "date_time",
"COALESCE(refer_created,created_time) as refer_created")
//按照 pseudo_session聚合,计算 session_id
val groupRDD: RDD[(String, Iterable[Row])] =
coalesceDF.rdd.groupBy(row => row.getAs[String]("pseudo_session"))
//计算两者之差,这时候就得到了 session_id
val sessionIdDF: DataFrame = groupRDD.map(sessionProcess.computeSessionId).flatMap(it => it)
.toDF("session_id", "user_id", "mobile", "device_token", "user_token",
"view_class", "view_path", "action_type", "component_tag",
"menu_code", "action_code", "position", "label_value","label_class","module_class1","module_class2",
"app_version", "device_type", "device_brand", "device_model",
"device_system", "net_type", "created_time", "date_time")
sessionIdDF
}
/**
* @Description 匹配user_id,补全数据中的user_id字段
* @param dataFrame 筛选后的数据
* @param sparkSQLSession SparkSession 环境
* @param created_day 当前数据的日期,格式 "2020-03-01"
* @return org.apache.spark.sql.Dataset<org.apache.spark.sql.Row>
**/
def matchUserId(dataFrame: DataFrame,sparkSQLSession: SparkSession,created_day:String):DataFrame={
//追加:将dataFrame与pica_ds.pica_doctor根据user_id进行匹配,匹配不上的user_id置为'0'
println("matchUserId开始执行-----------------------------------")
dataFrame.createOrReplaceTempView(MyConfigSession.VIEW_SESSION_ODS)
val DF = sparkSQLSession.sql(MyConfigSession.INIT_USER_ID_SQL)
//以下的所有逻辑是为了补全user_id字段
//第一步:首先筛选出不符合的use_id数据,将这些user_id置为字符串'0'
val noMatchUserIdDF: Dataset[Row] = DF.where("user_id ='' OR user_id = '0' OR LENGTH(user_id) = 24")
.selectExpr("session_id","'0' as user_id", "mobile", "device_token", "user_token",
"view_class", "view_path", "action_type", "component_tag",
"menu_code", "action_code", "position", "label_value","label_class","module_class1","module_class2",
"app_version", "device_type", "device_brand", "device_model",
"device_system", "net_type", "created_time", "date_time")
noMatchUserIdDF.createOrReplaceTempView(MyConfigSession.VIEW_SESSION_NO_MATCH)
//1.筛选出上一步没有匹配到的user_id,先按照mobile_phone进行匹配
val mobilePhoneDF: DataFrame = sparkSQLSession.sql(MyConfigSession.MOBILE_PHONE_SQL)
mobilePhoneDF.createOrReplaceTempView(MyConfigSession.VIEW_MOBILE_PHONE)
//2.使用临时表equiment,筛选出为1的那条最新数据
var equipmentInfoSql = MyConfigSession.EQUIPMENT_INFO_SQL
if(!created_day.equals(DateUtils.getYesterdayDate)){//如果不是跑昨天的数据,使用equipment拉链表
equipmentInfoSql = MyConfigSession.EQUIPMENT_INFO_SQL_ARGS+ s"'${created_day}'"
}
println(s"equipmentInfoSql=${equipmentInfoSql}")
val equipmentDF: DataFrame = sparkSQLSession.sql(equipmentInfoSql).where("row_d =1")
equipmentDF.createOrReplaceTempView(MyConfigSession.VIEW_EQUIPMENT_INFO)
//3.将第2步筛选出来的数据按照device_token进行匹配,获得user_id
val deviceTokenDF: DataFrame = sparkSQLSession.sql(MyConfigSession.DEVICE_TOKEN_SQL)
//4.将上述三者union,最终导入表中的数据
val rightUserId: Dataset[Row] = DF.where("user_id !='' and user_id != '0' and LENGTH(user_id) !=24")
val mobilePhoneResDF: Dataset[Row] = mobilePhoneDF.where("user_id !='0'")
val dwFactLogSession: Dataset[Row] = rightUserId.union(mobilePhoneResDF).union(deviceTokenDF)
dwFactLogSession.createOrReplaceTempView(MyConfigSession.VIEW_DEVICE_TOKEN)
//根据pica_doctor补充user_id_int字段(字段类型转换成int型), 限制 delete_flag = 1 and creat_time截止昨日创建,未关联上显示为0
val USER_ID_INT_SQL:String=
s"""
|SELECT concat(regexp_replace( '${created_day}',"-","") ,cast(row_number() over(partition by 1 order by created_time) as string)) as id,
|ss.session_id, ss.user_id,COALESCE(b.id,0) user_id_int, ss.mobile, ss.device_token, ss.user_token,
|ss.view_class,ss.view_path,ss.action_type,ss.component_tag, ss.menu_code,
|ss.action_code, ss.position,ss.label_value,ss.label_class,ss.module_class1,ss.module_class2,ss.app_version, ss.device_type,
|ss.device_brand, ss.device_model,ss.device_system,ss.net_type,ss.created_time,
|ss.date_time from ${MyConfigSession.VIEW_DEVICE_TOKEN} AS ss
|left join (select id,cast(id as string) id_str from pica.ods_pica_p_doctor a where a.delete_flag = 1 and to_date(a.creat_time) <= '${created_day}') AS b on ss.user_id = b.id_str
|""".stripMargin
val userIdDF: DataFrame = sparkSQLSession.sql(USER_ID_INT_SQL)
userIdDF
}
}
case class SessionLog(pseudo_session: String,
user_id: String,
mobile: String,
device_token: String,
user_token: String,
view_class: String,
view_path: String,
action_type: String,
component_tag: String,
menu_code: String,
action_code: String,
position: String,
label_value: String,
label_class: String,
module_class1: String,
module_class2: String,
app_version: String,
device_type: String,
device_brand: String,
device_model: String,
device_system: String,
net_type: String,
created_time: String,
date_time: String)
package com.aliyun.odps.spark.sparksql
import config.MyConfigSession
import org.apache.spark.broadcast.Broadcast
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.types.{IntegerType, LongType, StringType, StructField, StructType}
import org.apache.spark.sql.{DataFrame, Dataset, Row, SparkSession}
import org.apache.spark.storage.StorageLevel
import utils.{DateUtils, StringUtils, UseUtil}
import scala.collection.mutable
import scala.collection.mutable.ListBuffer
import scala.util.control.Breaks.{break, breakable}
/**
* 处理昨天的数据,用于计算时长以及访问路径,结果导入: dw_fact_log_session_term
* 注意点:
* 1.只保留service_name='trace2'(native)埋点数据,(h5埋点数据也会走native上报一份)
* 2.去掉ACTION_EQUIP_INFO类数据
* 1.首页加载前的引导页(android不埋 )不计入首页流量统计
* 2.对于ACTION_VIEW类型事件,用页面的resume以及stop事件计算访问时差
* 3.对于ACTION_HEART_BEAT事件中的back类型或者是BACKGROUND类事件,将menu_code定位back,
* 取连续backgroud的末次back的时间以及首次back时间差作为后台执行时长
* 4.如果menu_code值为空或值不符合规范,如果view_class有值取view_class代替
*
* @Author weicheng.mao
* @Date 2022/03/02 10:58
* @Version 1.0
*/
object SessionProcessTerm {
def apply(): SessionProcessTerm = new SessionProcessTerm()
def main(args: Array[String]): Unit = {
//设置同步数据的批次号,格式是2019-09-12
var scnData: String = DateUtils.getYesterdayDate
var elseFiler = " 1=1"
if (args.length >= 1) {
scnData = args(0)
if(args.length > 1 && args(1)!=""){
elseFiler = args(1)
}
}
println(s"scnData=${scnData}")
//设置任务开始时间,格式是2019-09-12 14:03:30
val startTime: String = DateUtils.getTodayTime
//存储SQL中的参数
val insertArr: Array[String] = Array[String](scnData, startTime)
val sessionProcessTerm: SessionProcessTerm = SessionProcessTerm()
try {
val sparkSession: SparkSession = sessionProcessTerm.getSparkSession("SessionProcessTerm")
//获取menu_code广播变量
val menuCodeBroad = UseUtil.getBroadcast(sparkSession, MyConfigSession.MENU_CODE_SQL, "view_path", "menu_code")
// //获取actionCategory变量
val actionCategory = UseUtil.getBroadcast(sparkSession, MyConfigSession.ACTION_CATEGORY_SQL, "action_type", "action_category")
//获取position对应的label_value广播变量
val positionUrlLabelBroad = UseUtil.getBroadcast(sparkSession, MyConfigSession.ACTION_URLLABEL_SQL, "url_content", "label_value")
println(s"positionUrlLabelBroad=${positionUrlLabelBroad.value}")
var SOURCE_SQL_COMMON =
s"""
|select pseudo_session,doctor_id,mobile,device_token,class_name,view_path,action,
|component_tag,app_version,device_type, cast(created as bigint) created,user_token_tourist,
|network_type ,device_brand,device_model,alternate_info,remark2 first_app_version,serviceName service_name
|from pica.picalog_trace_app_part
| where pseudo_session is not null and pseudo_session !='' and pseudo_id !='' and extra_info !='com.picahealth.patient'
| and action!='ACTION_EQUIP_INFO'
| and action!='ACTION_WEB_AFTER'
| and created is not null and created!='' and FROM_UNIXTIME(cast(substring(created,1,10) as bigint),'yyyy-MM-dd')='${scnData}'
| and created_day='${scnData}' and ${elseFiler}
|""".stripMargin
var SOURCE_SQL_TERM = SOURCE_SQL_COMMON + " and serviceName='trace2' "
println("SOURCE_SQL_TERM=="+SOURCE_SQL_TERM )
var sourceDF: DataFrame = sparkSession.sql(SOURCE_SQL_TERM )
/*
补充站外埋点数据
*/
//part1.通过device_token补充,device_token不为空时对应的埋点只有trace1数据的需要加进来
val SOURCE_SQL_TERM_ADD =
s"""
|select b.* from (
| select device_token, concat_ws( '_',collect_set(service_name) ) cws
| from (${SOURCE_SQL_COMMON}) s group by device_token having concat_ws( '_',collect_set(service_name)) ='trace1'
| ) a
| join ( ${SOURCE_SQL_COMMON + " and serviceName='trace1' "}) b on a.device_token=b.device_token
|""".stripMargin
println("SOURCE_SQL_TERM_ADD=="+SOURCE_SQL_TERM_ADD)
var sourceAddDF = sparkSession.sql(SOURCE_SQL_TERM_ADD )
sourceAddDF.createOrReplaceTempView("source_add_table")
//part2.通过pseudo_session补充,device_token为空时,pseudo_session对应的埋点只有trace1数据且doctor_id不为空的需要加进来
val SOURCE_SQL_TERM_ADD2 =
s"""
|select b.* from ( ${SOURCE_SQL_COMMON + " and serviceName='trace1' "}) b where b.doctor_id in (
| select doctor_id
| from (${SOURCE_SQL_COMMON +" and doctor_id not in ('','0') and doctor_id is not null" }) s group by doctor_id having concat_ws( '_',collect_set(service_name)) ='trace1'
| )
| and b.pseudo_session not in (select pseudo_session from source_add_table group by pseudo_session )
|""".stripMargin
println("SOURCE_SQL_TERM_ADD2=="+SOURCE_SQL_TERM_ADD2)
var sourceAdd2DF = sparkSession.sql(SOURCE_SQL_TERM_ADD2 )
val sourceResDF = sourceDF.union(sourceAddDF).union(sourceAdd2DF)
println("sourceResDF.show==================")
sourceResDF.printSchema()
println("selectDF.count=========",sourceResDF.count())
var conditionGroup = List( "<='1'","between '2' and '3'","between '4' and '5'","between '6' and '7'","between '8' and '9'",
"between 'a' and 'b'","between 'c' and 'd'",">='e'" )
var dataCount = 0
var index = 0
sourceResDF.persist(StorageLevel.MEMORY_AND_DISK_SER)
for(condition <- conditionGroup){
index += 1
val slideDF = sourceResDF.where(s" SUBSTRING(pseudo_session,2,1) ${condition}").repartition(100)
println(s"-----------------------------------compute refer columns,condition=${condition}-----------------------------------------")
println(s"-----------------------------------compute refer columns,condition_count=${slideDF.count()}-----------------------------------------")
val baseDF = sessionProcessTerm.offsetValues(menuCodeBroad,actionCategory,positionUrlLabelBroad,slideDF)
baseDF.repartition(120).persist(StorageLevel.MEMORY_AND_DISK_SER)
val referResultRdd = sessionProcessTerm.getReferColumns(baseDF)
val referResultDF: DataFrame = sparkSession.createDataFrame(referResultRdd, StructType(
List(StructField("pseudo_session", StringType, false),
StructField("session_id", StringType, false),
StructField("device_token", StringType, false),
StructField("user_id", IntegerType, false),
StructField("user_token", StringType, false),
StructField("mobile", StringType, false),
StructField("menu_code", StringType, false),
StructField("menu_begin_time", StringType, false),
StructField("action_code", StringType, false),
StructField("position", StringType, false),
StructField("label_value", StringType, false),
StructField("action", StringType, false),
StructField("action_type", StringType, false),
StructField("action_step", StringType, false),
StructField("device_type", StringType, false),
StructField("app_version", StringType, false),
StructField("created_time", LongType, false),
StructField("date_time", StringType, false),
StructField("pre_session_id", StringType, false),
//新增字段
StructField("label_class", StringType, true),
StructField("net_type", StringType, true),
StructField("module_class1", StringType, true),
StructField("module_class2", StringType, true),
StructField("device_brand", StringType, true),
StructField("device_model", StringType, true),
StructField("view_class", StringType, true),
StructField("view_path", StringType, true),
StructField("alternate_info", StringType, true),
StructField("first_app_version", StringType, true),
StructField("service_name", StringType, true),
StructField("tag8", StringType, true),
StructField("tag9", StringType, true),
StructField("component_tag", StringType, true)
)
))
println("referResultDF.show()============'")
referResultDF.show()
referResultDF.printSchema()
referResultDF.persist(StorageLevel.MEMORY_AND_DISK_SER).createOrReplaceTempView("refer_result_table")
println("-----------------------------------compute menu_code term-----------------------------------------")
val getMenuTermSql =
"""
|select a.session_id,a.device_token,a.user_id,a.menu_code,
|lag(a.created_time) over(partition by a.session_id order by a.created_time desc ) menu_end_time,a.created_time
| from refer_result_table a
| left join(select session_id,min(app_version) min_version from refer_result_table group by session_id) b on a.session_id=b.session_id
|""".stripMargin
//处理session最小版本>='3.4.5'的session数据
val newVersionMenuDF = sparkSession.sql(s"${getMenuTermSql} where b.min_version>='3.4.5' and a.action in('ACTION_ACTIVITY_RESUME','ACTION_HEART_BEAT','ACTION_WEB_ENTER') ")
println("newVersionMenuDF,show()======")
val oldVersionMenuDF = sparkSession.sql(s"${getMenuTermSql} where b.min_version<'3.4.5' and a.action_type in ('ACTION_VIEW','ACTION_HEART')")
println("oldVersionMenuDF,show()======")
val referMenuDF = newVersionMenuDF.union(oldVersionMenuDF)
println("referMenuDF.show()=========")
referMenuDF.printSchema()
referMenuDF.createOrReplaceTempView("refer_menu_table")
println("-----------------------------------compute session_id end_time-----------------------------------------")
val sessionEndDF: DataFrame = sessionProcessTerm.getSessionTail(slideDF, sparkSession)
println("------sessionEndDF.show()-------------")
sessionEndDF.printSchema()
sessionEndDF.createOrReplaceTempView("session_end_table")
val getReferSql =
s"""
|select
|a.session_id,
|a.device_token,
|a.user_id,
|a.user_token,
|a.mobile,
|a.menu_code,
|a.action_code,
|a.position,
|a.label_value,
|a.label_class,
|a.module_class1,
|a.module_class2,
|a.action_type,
|a.menu_begin_time,
| case when a.action_type in('ACTION_VIEW','ACTION_HEART') and b.menu_end_time is null then c.session_end_time else b.menu_end_time end menu_end_time,
|(cast((case when a.action_type in('ACTION_VIEW','ACTION_HEART') and b.menu_end_time is null then c.session_end_time else b.menu_end_time end) as bigint)-cast(a.menu_begin_time as bigint))/1000 menu_time_diff,
|a.action_step,
|a.device_type,
|a.device_brand,
|a.device_model,
|a.app_version,
|a.net_type,
|a.created_time,
|a.date_time,
|c.session_begin_time,
|c.session_end_time,
|(cast(c.session_end_time as bigint)-cast(c.session_begin_time as bigint))/1000 session_time_diff,
|a.pre_session_id,
|case when a.user_id=0 then a.device_token else a.user_id end user_identity_id,
|a.view_class,a.view_path, a.alternate_info, a.first_app_version,a.service_name,a.tag8,a.tag9,a.component_tag
|from refer_result_table a
|left join refer_menu_table b on a.session_id=b.session_id and a.device_token=b.device_token and a.user_id=b.user_id and a.menu_code=b.menu_code and a.created_time=b.created_time and a.action_type in('ACTION_VIEW','ACTION_HEART')
|left join session_end_table c on a.session_id = c.session_id
| distribute by rand()
|""".stripMargin
val menuCodeAddDF = sparkSession.sql(getReferSql).repartition(100)
println("menuCodeAddDF.show=======")
menuCodeAddDF.printSchema()
menuCodeAddDF.persist(StorageLevel.MEMORY_AND_DISK_SER)
println("-------------------------------match user_id 逻辑-------------------------------------------------")
val resultDF: DataFrame = sessionProcessTerm.matchUserId(menuCodeAddDF, sparkSession, scnData).repartition(5)
println("dwFactLogSession.show=======>")
resultDF.printSchema()
println("-----------------------------------load data to pica_dw.dw_fact_log_session_term-----------------")
sessionProcessTerm.loadData(resultDF, sparkSession, scnData,index,dataCount)
val resCount = resultDF.count().toInt
println(s"${condition}的结果==${resCount}")
dataCount += resCount
}
println("----------------------------------update task record table---------------------------------------")
//任务执行成功,更新 Mysql record 配置表
val updateSQL: String =
s"""
|update ${MyConfigSession.JDBC_TABLE} set status=?,end_time=?,data_count=? where job_name='${MyConfigSession.HIVE_TABLE4}' and start_time='${startTime}'
""".stripMargin
sparkSession.stop()
} catch {
case e: Exception => {
println("-----------------------------------任务异常---------------------------------------------------")
e.printStackTrace()
val exceptionSQL: String =
s"""
|update ${MyConfigSession.JDBC_TABLE} set status=?,exception=?,end_time=? where job_name='${MyConfigSession.HIVE_TABLE4}' and start_time='${startTime}'
""".stripMargin
}
}
}
}
class SessionProcessTerm {
def getSparkSession(appName: String): SparkSession = {
// val conf: SparkConf = new SparkConf().setAppName(appName)
// UseUtil.setConfigure(conf)
// val sparkSession: SparkSession = SparkSession.builder().config(conf).enableHiveSupport().getOrCreate()
// sparkSession
val sparkSession = SparkSession
.builder()
.config("spark.hadoop.odps.project.name", "pica")
.appName("SessionProcessTerm")
.getOrCreate()
sparkSession
}
def offsetValues(menuCodeBroad:Broadcast[Map[String,String]], actionCategory:Broadcast[Map[String,String]],
positionUrlLabelBroad:Broadcast[Map[String,String]],dataFrame: DataFrame): DataFrame = {
val path_menu: Map[String, String] = menuCodeBroad.value //关联到menu_code的映射表广播变量
val actionCategoryMap: Map[String, String] = actionCategory.value //关联到action_category的映射表广播变量
val positionLabelMap: Map[String, String] = positionUrlLabelBroad.value
val groupRdd = dataFrame.rdd.groupBy(r => r.getAs[String]("pseudo_session"))
val baseRdd = groupRdd.flatMap(g => {
val pseudo_session = g._1
val resList: ListBuffer[SessionTerm] = new ListBuffer[SessionTerm]()
var rowList = g._2
rowList = rowList.toList.sortWith((x, y) => x.getAs[Long]("created") > y.getAs[Long]("created")) //按created由大到小排序
var thisDeviceToken = ""
var thisDoctorId = "0"
var thisMobile = ""
rowList.foreach(row => {
var deviceToken = row.getAs[String]("device_token")
var doctorId = row.getAs[String]("doctor_id")
var mobile = row.getAs[String]("mobile")
if (deviceToken != null && !deviceToken.equals("")) {
thisDeviceToken = deviceToken
} else {
deviceToken = thisDeviceToken
}
if (doctorId != null && !doctorId.equals("") && !doctorId.equals("0")) {
thisDoctorId = doctorId
} else {
doctorId = thisDoctorId
}
if (mobile != null && !mobile.equals("")) {
thisMobile = mobile
} else {
mobile = thisMobile
}
//1.获取网络类型
//2G,3G,4G,2G/3G/4G,WIFI,WLAN,或者为空字符串
val net_type = UseUtil.netTypeMatch(StringUtils.getNotNullString(row.getAs[String]("network_type")))
//2.修改action类型,保留原始字段
val action = row.getAs[String]("action")
var action_type: String = ""
if (action != null) {
action_type = actionCategoryMap.getOrElse(action, "ACTION_UNKNOWN")
if(action=="ACTION_HEART_BEAT"){
action_type="ACTION_HEART"
}
}
//3.拆分 component_tag字段
val component_tag: String = StringUtils.getNotNullString(row.getAs[String]("component_tag"))
val view_path = StringUtils.getNotNullString(row.getAs[String]("view_path"))
val tagArr = Array("menu_code", "action_code", "position", "label_value", "label_class", "module_class1", "module_class2", "tag8", "tag9")
val tagMap = mutable.Map[String, String]()
tagArr.foreach(r => tagMap.put(r, ""))
//针对特定类型事件,将符合要求的component_tag进行切割,获取 aciton_code,label_value
if(List("ACTION_VIEW", "ACTION_CLICK", "ACTION_EXPOSE").contains(action_type)){
if (component_tag.contains("#")) {//默认是
//按照#号切割
val strs: Array[String] = component_tag.split("#")
var index = 0
for (value <- strs) {
val filedName = tagArr.apply(index)
if ("label_value".equals(filedName)) {
tagMap.put(filedName, value.substring(0, math.min(250, strs(3).length)))
} else {
tagMap.put(filedName, value)
}
index += 1
}
}else if(component_tag.length<5 && StringUtils.isNumeric(component_tag) && component_tag.toInt>0 ){ //如果component_tag不为0,且长度在合理区间,则作为menu_code值
tagMap.put("menu_code",component_tag)
}
}
var menu_code_new = tagMap("menu_code")
if ("MenuCode_081".equals(menu_code_new)) {
menu_code_new = "081" //针对异常menu_code值单独处理
}
//匹配menu_code:如果上述截取出来的menu_code为(''||null||0||length(menu_code)>3 && !component_tag.contains("#") ) and action is ACTION_VIEW
if ((menu_code_new.equals("") || menu_code_new.equals("null") || menu_code_new.equals("0") || (menu_code_new.length > 3 && !component_tag.contains("#")) )
&& action_type.equals("ACTION_VIEW")) {
menu_code_new = "0" //关联不上的显示为0
import scala.util.control.Breaks._
breakable {
//利用menu_code映射表匹配
for (tuple <- path_menu) {
//源数据view_path的字符串包含映射表view_path的字符串
if (view_path.contains(tuple._1)) {
//满足条件后,修改源数据的menu_code
menu_code_new = tuple._2
println("--------------------menu_code match successfully-----------------------")
//结束遍历
break()
}
}
}
}
//解析(5分钟|健康知识)详情页的id到position
if(action_type.equals("ACTION_VIEW") && List("425","015").contains(menu_code_new) && view_path.contains("?")){
val kvs=view_path.split("\\?").apply(1).split("&")
for(kv <- kvs){
val k = kv.split("=").apply(0)
if(menu_code_new=="425" && k=="id"){ //五分钟详情页
tagMap("position")= kv.split("=").apply(1)
}
if(menu_code_new=="015" && k=="eduComId"){ //健康知识详情页
tagMap("position")= kv.split("=").apply(1)
}
}
}
//
if(List("930000","930001","930002" ).contains(tagMap("action_code"))
&& "ACTION_CLICK".equals(action_type) && "930"== menu_code_new){
println("------------------------------------单独计算label_value----------------------------------------------")
//"menu_code = '930' and action_code IN ( '930000', '930001', '930002' ) and action_type = 'ACTION_CLICK'
breakable {
//利用position url_content映射表匹配
for (tuple <- positionLabelMap) {
if (StringUtils.getNotNullString(tagMap("position")).contains(tuple._1) && tuple._2!="" && tuple._2 != null) {
//满足条件后,修改源数据的label_value
tagMap("label_value") = tuple._2
println("--------------------menu_code match successfully-----------------------")
//结束遍历
break()
}
}
}
}
//针对menu_code缺失情况补偿处理
var menu_code_offset = menu_code_new
if(component_tag=="back"){
menu_code_offset = "back"
}
val view_class = StringUtils.getNotNullString(row.getAs[String]("class_name"))
if( List("0","null","").contains(menu_code_new) && !List("0","null","").contains(view_class)){
menu_code_offset = view_class
}
var user_id = 0
if(doctorId != null && !doctorId.equals("") && !doctorId.equals("0")){
user_id = doctorId.toInt
}
var app_version = StringUtils.getNotNullString(row.getAs[String]("app_version"))
var is_need = true //添加一个字段,下一步计算时长使用,
// 针对3.4.5之后的版本,使用ACTION_ACTIVITY_RESUME计算页面起止
if(app_version.length<8 && app_version>="3.4.5" && action=="ACTION_ACTIVITY_CREATE" && menu_code_new!="017" ){
is_need = false
}
resList += SessionTerm(pseudo_session,
user_id,
mobile,
deviceToken,
StringUtils.getNotNullString(row.getAs[String]("user_token_tourist")),
view_class,
StringUtils.getNotNullString(row.getAs[String]("view_path")),
action, action_type, component_tag, tagMap("menu_code"), menu_code_new,menu_code_offset, tagMap("action_code"),
tagMap("position"), tagMap("label_value"), tagMap("label_class"), tagMap("module_class1"), tagMap("module_class2"),
app_version,
StringUtils.getNotNullString(row.getAs[String]("device_type")),
StringUtils.getNotNullString(row.getAs[String]("device_brand")),
StringUtils.getNotNullString(row.getAs[String]("device_model")),
net_type, row.getAs[Long]("created"),
DateUtils.milliSecondsFormatTime(row.getAs[Long]("created") + ""),
StringUtils.getNotNullString(row.getAs[String]("alternate_info")),
StringUtils.getNotNullString(row.getAs[String]("first_app_version")),
StringUtils.getNotNullString(row.getAs[String]("service_name")),
tagMap("tag8"), tagMap("tag9"), is_need
)
})
resList.iterator
})
import dataFrame.sparkSession.implicits._
var baseDF = baseRdd.toDF("pseudo_session", "user_id", "mobile", "device_token", "user_token", "view_class", "view_path", "action", "action_type", "component_tag",
"menu_code", "menu_code_new","menu_code_offset", "action_code", "position", "label_value", "label_class", "module_class1", "module_class2", "app_version", "device_type", "device_brand", "device_model",
"net_type", "created_time", "date_time", "alternate_info", "first_app_version", "service_name", "tag8", "tag9", "is_need")
println("baseDF.show=======>")
baseDF.where("menu_code_new ='017'").show()
baseDF.printSchema()
baseDF
}
/**
* @Description 匹配user_id,补全数据中的user_id字段
* @param dataFrame 筛选后的数据
* @param sparkSQLSession SparkSession 环境
* @param created_day 当前数据的日期,格式 "2020-03-01"
* @return org.apache.spark.sql.Dataset<org.apache.spark.sql.Row>
**/
def matchUserId(dataFrame: DataFrame, sparkSQLSession: SparkSession, created_day: String): DataFrame = {
//追加:将dataFrame与pica_ds.pica_doctor根据user_id进行匹配,匹配不上的user_id置为'0'
println("matchUserId开始执行-----------------------------------")
dataFrame.withColumnRenamed("user_id", "user_id_ods").createOrReplaceTempView(MyConfigSession.VIEW_SESSION_ODS)
val INIT_USER_ID_SQL_PREF =
s"""
|SELECT t.*,t.user_id_ods user_id_old, COALESCE(cast(b.id as string),'0') AS user_id from ${MyConfigSession.VIEW_SESSION_ODS} as t
|left join (select id,cast(id as string) id_str from pica.ods_pica_p_doctor a where to_date(a.creat_time) <= '${created_day}') AS b on t.user_id_ods = cast(b.id as string)
""".stripMargin
val DF = sparkSQLSession.sql(INIT_USER_ID_SQL_PREF).drop("user_id_ods")
/*
以下的所有逻辑是为了补全user_id字段
*/
//第一步:首先筛选出不符合的use_id数据,将这些user_id置为字符串'0'
val noMatchUserIdDF: Dataset[Row] = DF.where("user_id ='' OR user_id = '0' OR LENGTH(user_id) = 24")
noMatchUserIdDF.drop("user_id_old").withColumnRenamed("user_id", "user_id_old")
.createOrReplaceTempView(MyConfigSession.VIEW_SESSION_NO_MATCH)
//1.筛选出上一步没有匹配到的user_id,先按照mobile_phone进行匹配
val MOBILE_PHONE_SQL_PREF: String =
s"""
|SELECT ss.*,COALESCE(cast(b.id as string),'0') AS user_id from ${MyConfigSession.VIEW_SESSION_NO_MATCH} AS ss
|left join (select distinct id,mobile_phone from pica.ods_pica_p_doctor where delete_flag=1 and mobile_phone!='' and mobile_phone!='XK0HdMN6dAfOlYPOFHHL0A==') AS b on ss.mobile = b.mobile_phone
""".stripMargin
val mobilePhoneDF: DataFrame = sparkSQLSession.sql(MOBILE_PHONE_SQL_PREF)
//2.使用临时表equiment,筛选出为1的那条最新数据
var equipmentInfoSql = MyConfigSession.EQUIPMENT_INFO_SQL
if (!created_day.equals(DateUtils.getYesterdayDate)) { //如果不是跑昨天的数据,使用equipment拉链表
equipmentInfoSql = MyConfigSession.EQUIPMENT_INFO_SQL_ARGS + s"'${created_day}'"
}
println(s"equipmentInfoSql=${equipmentInfoSql}")
val equipmentDF: DataFrame = sparkSQLSession.sql(equipmentInfoSql).where("row_d =1")
equipmentDF.createOrReplaceTempView(MyConfigSession.VIEW_EQUIPMENT_INFO)
mobilePhoneDF.drop("user_id_old").withColumnRenamed("user_id", "user_id_old")
.createOrReplaceTempView(MyConfigSession.VIEW_MOBILE_PHONE)
val DEVICE_TOKEN_SQL_PREF: String =
s""" SELECT t.*,COALESCE(cast(b.user_id as string),'0') AS user_id
| from (select * from ${MyConfigSession.VIEW_MOBILE_PHONE} a where a.user_id_old= '0' ) as t
|left join ${MyConfigSession.VIEW_EQUIPMENT_INFO} as b on t.device_token = b.device_token
""".stripMargin
println(s"DEVICE_TOKEN_SQL_PREF=${DEVICE_TOKEN_SQL_PREF}")
//3.将第2步筛选出来的数据按照device_token进行匹配,获得user_id
val deviceTokenDF: DataFrame = sparkSQLSession.sql(DEVICE_TOKEN_SQL_PREF)
//4.将上述三者union,最终导入表中的数据
val rightUserIdDF: Dataset[Row] = DF.where("user_id !='' and user_id != '0' and LENGTH(user_id) !=24")
val mobilePhoneResDF: Dataset[Row] = mobilePhoneDF.where("user_id !='0'")
println("rightUserIdDF/mobilePhoneResDF/deviceTokenDF.schema===========")
rightUserIdDF.printSchema()
mobilePhoneResDF.printSchema()
deviceTokenDF.printSchema()
val dwFactLogSession: Dataset[Row] = rightUserIdDF.union(mobilePhoneResDF).union(deviceTokenDF)
dwFactLogSession.createOrReplaceTempView(MyConfigSession.VIEW_DEVICE_TOKEN)
dwFactLogSession
}
/**
* @Description 获取需要的字段的refer字段以及对pseudo_session进行拆分
* https://www.tapd.cn/64812329/prong/stories/view/1164812329001012031需求上线版本为(Android:3.4.5,iOS:3.4.4,之后的版本统一到3.4.6)
* 计算sessionId,按版本号区分数据,之前的作为老数据处理,之后的作为新数据处理,老数据对pseudo_session进行拆分,时间最大间隔30分钟
* 新数据不拆分session,按ACTION_HEART_BEAT区分session活跃时间(新增ACTION_HEART_BEAT事件的版本是3.3.2)
* @param sourceDF 源数据
* @return org.apache.spark.sql.Dataset<org.apache.spark.sql.Row>
**/
def getReferColumns(sourceDF: DataFrame): RDD[Row] = {
val actions = List("'ACTION_VIEW'", "'ACTION_CLICK'", "'ACTION_EXPOSE'","'ACTION_START'") //高版本使用"'ACTION_HEART_BEAT'"
val actionCommonDF = sourceDF.where(s" ( action_type in (${actions.mkString(",")}) or (action_type='ACTION_HEART' and menu_code_offset='back' )) ")
.filter("is_need")
println("actionCommonDF.show()===========")
actionCommonDF.filter("menu_code='017'").show()
actionCommonDF.printSchema()
//计算session中menu_code的起始时间,对于ACTION_HEART_BEAT的埋点记录剔除冗余数据
val groupRdd = actionCommonDF.rdd.groupBy(r => r.getAs[String]("pseudo_session"))//.repartition(100)
println("开始执行groupRdd.flatMap=========")
val resRdd = groupRdd.flatMap(g => {
val pseudo_session = g._1
val resList: ListBuffer[Row] = new ListBuffer[Row]()
var rowList = g._2
rowList = rowList.toList.sortWith((x, y) => x.getAs[Long]("created_time") < y.getAs[Long]("created_time")) //按created由小到小排序
var actionStep = "0_0"
var thisMenuCode = ""
var menuBeginTime = ""
var prefCreatedTime = ""
var prefActionType = ""
var count = 0
for (row <- rowList) {
var isSessionNew = false
var appVersion = row.getAs[String]("app_version")
//如果版本号低于3.3.2,则没有ACTION_HEART_BEAT事件,需要根据两次事件之间的时差对session进行切分,超过30分钟则拆分出一个session
var createdTime = row.getAs[Long]("created_time")
if (appVersion < "3.3.2") { //版本号低于3.3.2,需要根据时差判断是否 拆分session
if (prefCreatedTime != "" && (createdTime.toLong - prefCreatedTime.toLong) > MyConfigSession.SESSION_GAP) { //本次action事件事件比
count += 1
isSessionNew = true
}
}
var menuCode = row.getAs[String]("menu_code_offset")
val action = row.getAs[String]("action")
val actionType = row.getAs[String]("action_type")
var sessionId = pseudo_session + count
var preSessionId = ""
if (count > 0) {
preSessionId = pseudo_session + (count - 1)
}
//使用版本以及action_type限制是否入库
var needPut = true
if ("ACTION_VIEW".equals(actionType) || "ACTION_HEART".equals(actionType)) {
if (appVersion >= "3.4.5") { //针对3.4.5之后的版本单独处理
//如果本条记录为ACTION_ACTIVITY_RESUME类型或者ACTION_HEART类型或者menu_code为017表示外部方式启动app,则入库
if ("ACTION_ACTIVITY_RESUME".equals(action) || "ACTION_HEART".equals(actionType) ||"ACTION_WEB_ENTER".equals(action)|| "017".equals(menuCode)) {//有些h5页面没有对应的ACTION_ACTIVITY_RESUME,需要补进来
needPut = true
}else{
needPut = false
}
if ( thisMenuCode.equals(menuCode) && ("ACTION_HEART"==prefActionType || "ACTION_VIEW" == prefActionType)){
needPut = false
}
}else{
if ( thisMenuCode.equals(menuCode) && ("ACTION_HEART"==prefActionType || "ACTION_VIEW" == prefActionType) && !isSessionNew ) {
needPut = false
}
}
if(needPut){
menuBeginTime = createdTime.toString
}
}
//如果menuCode发生改变,或者session改变,重置本轮menuCode
if (!thisMenuCode.equals(menuCode) || isSessionNew) {
menuBeginTime = createdTime.toString
if(needPut ){//只有在确定该menu_code对应的记录入库后,才更新thisMenuCode以及对应的menu_code访问顺序
thisMenuCode = menuCode
actionStep = (actionStep.split("_")(0).toInt + 1).toString + "_0"
}
} else {//如果menuCode与session都不变, actionType改变或者actionType为非浏览行为,则调整actionStep
if (!(prefActionType.equals(actionType) && "ACTION_VIEW".equals(actionType))) {
actionStep = (actionStep.split("_")(0)) + "_" + (actionStep.split("_")(1).toInt + 1).toString
}
}
// println(s"created_time=${createdTime},thisMenuCode=${thisMenuCode},actionType=${actionType},action=${action},isMenuChange=${!thisMenuCode.equals(menuCode)},prefActionType=${prefActionType},needPut=${needPut}" )
prefCreatedTime = createdTime.toString
prefActionType = actionType
if (needPut) {
resList += (Row( pseudo_session,sessionId,
row.getAs[String]("device_token"),
row.getAs[Integer]("user_id"),
row.getAs[String]("user_token"),
row.getAs[String]("mobile"),
thisMenuCode,
menuBeginTime,
row.getAs[String]("action_code"),
row.getAs[String]("position"),
row.getAs[String]("label_value"),
action, actionType, actionStep,
row.getAs[String]("device_type"),
row.getAs[String]("app_version"),
createdTime,
row.getAs[String]("date_time"),
preSessionId,
row.getAs[String]("label_class"),
row.getAs[String]("net_type"),
row.getAs[String]("module_class1"),
row.getAs[String]("module_class2"),
row.getAs[String]("device_brand"),
row.getAs[String]("device_model"),
row.getAs[String]("view_class"),
row.getAs[String]("view_path"),
row.getAs[String]("alternate_info"),
row.getAs[String]("first_app_version"),
row.getAs[String]("service_name"),
row.getAs[String]("tag8"),
row.getAs[String]("tag9"),
row.getAs[String]("component_tag")
))
}
}
resList.iterator
})
resRdd
}
/**
* @Description 计算session_end_time,分两张情况:
* 1.如果是低版本数据,session有拆分记录,则取session_id的首条记录时间以及末次记录时间作为session起始结束时间
* 2.如果是高版本数据,session无拆分记录,则取session_id对应的pseudo_session首次以及末次出现的记录时间作为session起止时间
* @param sourceDF 源数据
* @return
*/
def getSessionTail(sourceDF: DataFrame, sparkSession: SparkSession): DataFrame = {
sourceDF.createOrReplaceTempView("select_res_table")
val sourceSql =
"""
|select session_id,min(created_time) session_begin_time,max(created_time) session_end_time from refer_result_table
| group by session_id
|""".stripMargin
val firstSessionEndDF = sparkSession.sql(sourceSql)
println("firstSessionEndDF.show()=========")
firstSessionEndDF
}
def loadData(dataFrame: DataFrame, sparkSession: SparkSession, partitionDay: String,index:Integer,count:Integer): Unit = {
dataFrame.createOrReplaceTempView("result_view")
var insertSql = "insert overwrite"
if(index!=1){
insertSql = "insert into"
}
//补充新生session超过10个之后的session的session_begin_time与session_end_time
val HIVE_TABLE4 = "pica_dw.dw_fact_log_session_term_tmp"
val loadDataSql =
s"""
|${insertSql} table ${MyConfigSession.HIVE_TABLE4} partition(created_day='${partitionDay}')
| select concat(regexp_replace( '${partitionDay}','-','') ,cast( (row_number() over(partition by 1 order by created_time) )+${count} as string)) id,
| t1.session_id,device_token,user_id,user_token,mobile,menu_code,action_code,position,label_value,label_class,module_class1,module_class2,action_type,
| cast(menu_begin_time as string), cast(menu_end_time as string), menu_time_diff,
| action_step,device_type,device_brand,device_model, app_version, net_type ,created_time,date_time,
| cast(session_begin_time as string) , cast(session_end_time as string), session_time_diff,
| pre_session_id, user_identity_id,view_class,view_path,alternate_info,first_app_version,service_name,tag8,tag9,component_tag
| from result_view t1
""".stripMargin
sparkSession.sql(loadDataSql)
}
def strToInt(str: String): Int = {
val regex = """([0-9]+)""".r
val res = str match{
case regex(num) => num
case _ => "0"
}
val resInt = Integer.parseInt(res)
resInt
}
}
case class SessionTerm(pseudo_session: String,
user_id: Integer,
mobile: String,
device_token: String,
user_token: String,
view_class: String,
view_path: String,
action: String,
action_type: String,
component_tag: String,
menu_code: String,
menu_code_new: String,
menu_code_offset:String,
action_code: String,
position: String,
label_value: String,
label_class: String,
module_class1: String,
module_class2: String,
app_version: String,
device_type: String,
device_brand: String,
device_model: String,
net_type: String,
created_time: Long,
date_time: String,
alternate_info: String,
first_app_version: String,
service_name: String,
tag8: String, tag9: String,
is_need:Boolean)
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.aliyun.odps.spark.sparksql
import org.apache.spark.sql.{SaveMode, SparkSession}
object SparkSQL {
def main(args: Array[String]) {
val spark = SparkSession
.builder()
.appName("SparkSQL-on-MaxCompute")
.config("spark.sql.broadcastTimeout", 20 * 60)
.config("spark.sql.crossJoin.enabled", true)
.config("odps.exec.dynamic.partition.mode", "nonstrict")
.getOrCreate()
// val project = spark.conf.get("odps.project.name")
import spark._
import sqlContext.implicits._
val tableName = "mc_test_table"
val ptTableName = "mc_test_pt_table"
// Drop Create
sql(s"DROP TABLE IF EXISTS ${tableName}")
sql(s"DROP TABLE IF EXISTS ${ptTableName}")
sql(s"CREATE TABLE ${tableName} (name STRING, num BIGINT)")
sql(s"CREATE TABLE ${ptTableName} (name STRING, num BIGINT) PARTITIONED BY (pt1 STRING, pt2 STRING)")
val df = spark.sparkContext.parallelize(0 to 99, 2).map(f => {
(s"name-$f", f)
}).toDF("name", "num")
val ptDf = spark.sparkContext.parallelize(0 to 99, 2).map(f => {
(s"name-$f", f, "2018", "0601")
}).toDF("name", "num", "pt1", "pt2")
// 写 普通表
df.write.insertInto(tableName) // insertInto语义
df.write.mode("overwrite").insertInto(tableName) // insertOverwrite语义
// 写 分区表
// DataFrameWriter 无法指定分区写入 需要通过临时表再用SQL写入特定分区
df.createOrReplaceTempView(s"${ptTableName}_tmp_view")
sql(s"insert into table ${ptTableName} partition (pt1='2018', pt2='0601') select * from ${ptTableName}_tmp_view")
sql(s"insert overwrite table ${ptTableName} partition (pt1='2018', pt2='0601') select * from ${ptTableName}_tmp_view")
ptDf.write.insertInto(ptTableName) // 动态分区 insertInto语义
ptDf.write.mode("overwrite").insertInto(ptTableName) // 动态分区 insertOverwrite语义
// 读 普通表
val rdf = sql(s"select name, num from $tableName")
println(s"rdf count, ${rdf.count()}")
rdf.printSchema()
// 读 分区表
val rptdf = sql(s"select name, num, pt1, pt2 from $ptTableName where pt1 = '2018' and pt2 = '0601'")
println(s"rptdf count, ${rptdf.count()}")
rptdf.printSchema()
}
}
package com.aliyun.odps.spark.sparksql.profile
import com.alibaba.fastjson.JSONObject
import org.apache.spark.SparkConf
import org.apache.spark.broadcast.Broadcast
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{Row, SparkSession}
import java.{sql, util}
import java.sql.{PreparedStatement, Timestamp}
import config.MyConfigSession
import utils.{DateUtils, MySqlUtil, StringUtils}
object Business_profile {
def apply(): Business_profile = new Business_profile()
def main(args: Array[String]): Unit = {
//1.执行任务之前先往record表记录
// val insertSQL: String =
// s"""
// |insert into ${MyConfigSession.DATA_BASE}.${MyConfigSession.JDBC_TABLE} (job_id,job_name,job_type,job_scn,status,start_time)
// |values(0,'Business_profile','3',?,'0',?)
// """.stripMargin
//设置同步数据的批次号,格式是2019-09-12
var scnData: String = DateUtils.getTodayDate
var first_lable_id = ""
var tbname = ""
var list =
if (args.length >= 1) {
scnData = args(0)
if (args.length > 1 && args(1) != "") {
first_lable_id = args(1)
}
if (args.length > 2 && args(2) != "") {
tbname = args(2)
}
}
println(s"scnData=${scnData}")
//设置任务开始时间,格式是2019-09-12 14:03:30
val startTime: String = DateUtils.getTodayTime
//存储SQL中的参数
val insertArr: Array[String] = Array[String](scnData, startTime)
//获取MYSQL连接
// val connSql: sql.Connection = JDBCUtil.getConnection()
//向 record 表插入数据
// val flag: Int = JDBCUtil.insertRecord(connSql, insertSQL, insertArr)
val business_profile: Business_profile = Business_profile()
try {
val sparkSession: SparkSession = business_profile.getSparkSession("Business_profile")
var conditionGroup = List("between 7693 and 7718",
"between 7719 and 8031",
"between 8032 and 8083",
"between 8084 and 8149",
"between 8150 and 8195",
"between 8196 and 8362",
"between 8363 and 8377",
"between 8378 and 9531",
"between 9532 and 9568",
"between 9569 and 9653"
)
var index = 0 //插入新增标识
for(condition <- conditionGroup){
index += 1
println("查询标签的sql"+s"select * from ods_pica_bi_user_profile where sql_string <>'' and first_lable_id in (${first_lable_id}) and third_label_id ${condition} order by third_label_id ")
val list_row: util.List[Row] = sparkSession.sql(
s"""
|
|select * from ods_pica_bi_user_profile
|where sql_string <>''
|and first_lable_id in (${first_lable_id})
|and third_label_id ${condition}
|order by third_label_id
|""".stripMargin).collectAsList()
// val profileListSQL=s"select * from user_profile where sql_string <>'' and first_lable_id in (${first_lable_id}) and third_label_id ${condition} order by third_label_id "
// val MYSQL_URL = MyConfigSession.mysql_url_user_profile
// val profileList: util.List[JSONObject] = MySqlUtil.queryList(profileListSQL,MYSQL_URL)
import collection.JavaConverters._
val profileListScala = list_row.asScala
val tbbuffer = new StringBuilder
val partitionDay = DateUtils.getTodayDate
for(profile <- profileListScala){
val first_lable_id= profile.getAs[String]("first_lable_id")
val first_lable_name= profile.getAs[String]("first_lable_name")
val secondary_label_id= profile.getAs[String]("secondary_label_id")
val secondary_label_name = profile.getAs[String]("secondary_label_name")
val third_label_id = profile.getAs[String]("third_label_id")
val third_label_name = profile.getAs[String]("third_label_name")
val sql_string = profile.getAs[String]("sql_string")
val Stringstr = s"""
|select ${first_lable_id} as first_lable_id,'${first_lable_name}' as first_lable_name
| ,${secondary_label_id} as secondary_label_id,'${secondary_label_name}' as secondary_label_name
| ,${third_label_id} as third_label_id,'${third_label_name}' as third_label_name,A.user_id,A.value,A.acct_id,A.profile_id
|from ${first_lable_id}_${secondary_label_id}_${third_label_id} A
|""".stripMargin
println("计算的sql拼接:"+Stringstr)
val df = sparkSession.sql(sql_string).repartition(400)
df.createOrReplaceTempView(s"${first_lable_id}_${secondary_label_id}_${third_label_id}")
sparkSession.sql(
s"""
|select ${first_lable_id} as first_lable_id,'${first_lable_name}' as first_lable_name
| ,${secondary_label_id} as secondary_label_id,'${secondary_label_name}' as secondary_label_name
| ,${third_label_id} as third_label_id,'${third_label_name}' as third_label_name,user_id,value,acct_id,profile_id
|from ${first_lable_id}_${secondary_label_id}_${third_label_id}
|""".stripMargin).createOrReplaceTempView(s"temp_${first_lable_id}_${secondary_label_id}_${third_label_id}")
if(StringUtils.isEmpty(tbbuffer.toString())){
var insertSql = "insert overwrite"
if(index!=1){
insertSql = "insert into"
}
tbbuffer.append(
s"""
|${insertSql} table ${tbname} partition(created_day='${scnData}')
| select user_id,cast(value as string),CAST(acct_id AS STRING),CAST(profile_id AS STRING),first_lable_id,first_lable_name,secondary_label_id,secondary_label_name,third_label_id,third_label_name
| FROM temp_${first_lable_id}_${secondary_label_id}_${third_label_id}
|""".stripMargin)
}else{
tbbuffer.append(
s"""
|union all
|select user_id,cast(value as string),CAST(acct_id AS STRING),CAST(profile_id AS STRING),first_lable_id,first_lable_name,secondary_label_id,secondary_label_name,third_label_id,third_label_name
|FROM temp_${first_lable_id}_${secondary_label_id}_${third_label_id}
|""".stripMargin
)
}
}
println("------------------------------------------------开始最后的union拼接sql------------------------------------------------------------"+tbbuffer.toString())
val resulteDf = sparkSession.sql(tbbuffer.toString())
println("------------------------------------------------success------------------------------------------------------------"+tbbuffer.toString())
}
sparkSession.stop()
// //任务执行成功,更新 Mysql record 配置表
// val updateSQL: String =
// s"""
// |update ${MyConfigSession.JDBC_TABLE} set status=?,end_time=? where job_name='Business_profile' and start_time='${startTime}'
// """.stripMargin
// val upreSta: PreparedStatement = connSql.prepareStatement(updateSQL)
// upreSta.setString(1, "1")
// upreSta.setString(2, DateUtils.getTodayTime)
//
// //更新表数据
// upreSta.executeUpdate()
// //关闭连接
//// JDBCUtil.close(connSql, upreSta)
sparkSession.stop()
} catch {
case e: Exception => {
println("-----------------------------------任务异常---------------------------------------------------")
e.printStackTrace()
throw new Exception
// val exceptionSQL: String =
// s"""
// |update ${MyConfigSession.JDBC_TABLE} set status=?,exception=?,end_time=? where job_name='Business_profile' and start_time='${startTime}'
// """.stripMargin
// val errorArr = Array[String]("2", e.getMessage, DateUtils.getTodayTime)
// JDBCUtil.insertRecord(connSql, exceptionSQL, errorArr)
// connSql.close()
}
}
}
}
class Business_profile {
def getSparkSession(appName: String): SparkSession = {
// val sparkSession = SparkSession
// .builder()
// .appName("SparkPi")
// .config("spark.master", "local[1]") // 需设置spark.master为local[N]才能直接运行,N为并发数。
// .config("spark.hadoop.odps.project.name", "pica")
// .config("spark.hadoop.odps.access.id", "LTAI5tQEnb9VREcPdDAR32bg")
// .config("spark.hadoop.odps.access.key", "RYazt1JIYZnRcEdlntarZ1Ov21zoNi")
// .config("spark.hadoop.odps.end.point", "http://service.cn.maxcompute.aliyun.com/api")
// .config("spark.sql.catalogImplementation", "odps")
// .getOrCreate()
val sparkSession = SparkSession
.builder()
.config("spark.hadoop.odps.project.name", "pica")
.appName("SessionProcess")
.getOrCreate()
sparkSession
}
}
case class profile(
first_lable_id:Int,
first_lable_name:String,
secondary_label_id:Int,
secondary_label_name:String,
third_label_id:Int,
third_label_name:String,
load_date:Timestamp,
sql_string:String
)
\ No newline at end of file
package com.aliyun.odps.spark.streaming.common
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
object SparkSessionSingleton {
@transient private var instance: SparkSession = _
def getInstance(sparkConf: SparkConf): SparkSession = {
if (instance == null) {
instance = SparkSession
.builder
.config(sparkConf)
.getOrCreate()
}
instance
}
}
package com.aliyun.odps.spark.streaming.datahub
import com.aliyun.datahub.model.RecordEntry
import com.aliyun.odps.spark.streaming.common.SparkSessionSingleton
import org.apache.spark.sql.SparkSession
import org.apache.spark.storage.StorageLevel
import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.streaming.aliyun.datahub.DatahubUtils
object DataHub2OdpsDemo {
def transferFunc(record: RecordEntry): String = {
// 这个转化函数目前只支持把DataHub Record转成String
// 如果是需要多个字段的话, 那么需要处理一下拼接的逻辑
record.getString(1)
}
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder()
.appName("DataHubStreamingDemo")
.config("spark.hadoop.fs.oss.credentials.provider", "org.apache.hadoop.fs.aliyun.oss.AliyunStsTokenCredentialsProvider")
.config("spark.hadoop.fs.oss.ststoken.roleArn", "acs:ram::****:role/aliyunodpsdefaultrole")
.config("spark.hadoop.fs.oss.endpoint", "oss-cn-hangzhou-zmf.aliyuncs.com")
.getOrCreate()
// 设置Batch间隔时间
val ssc = new StreamingContext(spark.sparkContext, Seconds(10))
// checkpoint dir to oss
ssc.checkpoint("oss://bucket/inputdata/")
val dataStream = DatahubUtils.createStream(
ssc,
"projectName",
"topic",
"subId",
"accessId",
"accessKey",
"endPoint",
transferFunc(_),
StorageLevel.MEMORY_AND_DISK
)
dataStream.map(x => new String(x)).foreachRDD(rdd => {
val spark = SparkSessionSingleton.getInstance(rdd.sparkContext.getConf)
import spark.implicits._
rdd.toDF("id").write.mode("append").saveAsTable("test_table")
})
ssc.start()
ssc.awaitTermination()
}
}
package com.aliyun.odps.spark.streaming.datahub
import com.aliyun.datahub.model.RecordEntry
import org.apache.spark.sql.SparkSession
import org.apache.spark.storage.StorageLevel
import org.apache.spark.streaming.aliyun.datahub.DatahubUtils
import org.apache.spark.streaming.{Seconds, StreamingContext}
object DataHubStreamingDemo {
def transferFunc(record: RecordEntry): String = {
// 这个转化函数目前只支持把DataHub Record转成String
// 如果是需要多个字段的话, 那么需要处理一下拼接的逻辑
record.getString(1)
}
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder()
.appName("DataHubStreamingDemo")
.config("spark.hadoop.fs.oss.credentials.provider", "org.apache.hadoop.fs.aliyun.oss.AliyunStsTokenCredentialsProvider")
.config("spark.hadoop.fs.oss.ststoken.roleArn", "acs:ram::****:role/aliyunodpsdefaultrole")
.config("spark.hadoop.fs.oss.endpoint", "oss-cn-hangzhou-zmf.aliyuncs.com")
.getOrCreate()
// 设置Batch间隔时间
val ssc = new StreamingContext(spark.sparkContext, Seconds(5))
// checkpoint dir to oss
ssc.checkpoint("oss://bucket/inputdata/")
val dataStream = DatahubUtils.createStream(
ssc,
"projectName",
"topic",
"subId",
"accessId",
"accessKey",
"endPoint",
transferFunc(_),
StorageLevel.MEMORY_AND_DISK
)
dataStream.count().print()
ssc.start()
ssc.awaitTermination()
}
}
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.aliyun.odps.spark.streaming.kafka
import com.aliyun.odps.spark.streaming.common.SparkSessionSingleton
import org.apache.kafka.clients.consumer.ConsumerRecord
import org.apache.kafka.common.serialization.StringDeserializer
import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.streaming.dstream.{DStream, InputDStream}
import org.apache.spark.streaming.kafka010.{ConsumerStrategies, KafkaUtils, LocationStrategies}
object Kafka2OdpsDemo {
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setAppName("test")
val ssc = new StreamingContext(sparkConf, Seconds(10))
// 请使用OSS作为Checkpoint存储,修改为有效OSS路径。OSS访问文档请参考 https://github.com/aliyun/MaxCompute-Spark/wiki/08.-Oss-Access%E6%96%87%E6%A1%A3%E8%AF%B4%E6%98%8E
ssc.checkpoint("oss://bucket/checkpointdir")
// kafka配置参数
val kafkaParams = Map[String, Object](
"bootstrap.servers" -> "localhost:9092",
"key.deserializer" -> classOf[StringDeserializer],
"value.deserializer" -> classOf[StringDeserializer],
"group.id" -> "testGroupId",
"auto.offset.reset" -> "latest",
"enable.auto.commit" -> (false: java.lang.Boolean)
)
// 创建kafka dstream
val topics = Set("test")
val recordDstream: InputDStream[ConsumerRecord[String, String]] =
KafkaUtils.createDirectStream[String, String](
ssc,
LocationStrategies.PreferConsistent,
ConsumerStrategies.Subscribe[String, String](topics, kafkaParams)
)
val dstream = recordDstream.map(f => (f.key(), f.value()))
// 解析kafka数据并写入odps
val data: DStream[String] = dstream.map(_._2)
val wordsDStream: DStream[String] = data.flatMap(_.split(" "))
wordsDStream.foreachRDD(rdd => {
val spark = SparkSessionSingleton.getInstance(rdd.sparkContext.getConf)
import spark.implicits._
rdd.toDF("id").write.mode("append").saveAsTable("test_table")
})
ssc.start()
ssc.awaitTermination()
}
}
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.aliyun.odps.spark.streaming.kafka
import org.apache.kafka.clients.consumer.ConsumerRecord
import org.apache.kafka.common.serialization.StringDeserializer
import org.apache.spark.sql.SparkSession
import org.apache.spark.streaming.dstream.{DStream, InputDStream}
import org.apache.spark.streaming.kafka010.{ConsumerStrategies, KafkaUtils, LocationStrategies}
import org.apache.spark.streaming.{Seconds, StreamingContext}
object KafkaStreamingDemo {
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder()
.appName("KafkaStreamingDemo")
.getOrCreate()
val ssc = new StreamingContext(spark.sparkContext, Seconds(5))
// 请使用OSS作为Checkpoint存储
ssc.checkpoint("oss://bucket/checkpointDir/")
// kafka配置参数
val kafkaParams = Map[String, Object](
"bootstrap.servers" -> "192.168.1.1:9200,192.168.1.2:9200,192.168.1.3:9200",
"key.deserializer" -> classOf[StringDeserializer],
"value.deserializer" -> classOf[StringDeserializer],
"group.id" -> "testGroupId",
"auto.offset.reset" -> "latest",
"enable.auto.commit" -> (false: java.lang.Boolean)
)
val topics = Set("event_topic")
val recordDstream: InputDStream[ConsumerRecord[String, String]] =
KafkaUtils.createDirectStream[String, String](
ssc,
LocationStrategies.PreferConsistent,
ConsumerStrategies.Subscribe[String, String](topics, kafkaParams)
)
val dstream = recordDstream.map(f => (f.key(), f.value()))
val data: DStream[String] = dstream.map(_._2)
val wordsDStream: DStream[String] = data.flatMap(_.split(" "))
val wordAndOneDstream: DStream[(String, Int)] = wordsDStream.map((_, 1))
val result: DStream[(String, Int)] = wordAndOneDstream.reduceByKey(_ + _)
result.print()
ssc.start()
ssc.awaitTermination()
}
}
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.aliyun.odps.spark.streaming.loghub
import com.aliyun.odps.spark.streaming.common.SparkSessionSingleton
import com.aliyun.openservices.loghub.client.config.LogHubCursorPosition
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.storage.StorageLevel
import org.apache.spark.streaming.{Durations, StreamingContext}
import org.apache.spark.streaming.loghub.{LoghubUtils, StreamingParam}
object LogHub2OdpsDemo {
def buildParam(conf: SparkConf): StreamingParam = {
val sp = new StreamingParam()
sp.setId(conf.get("spark.logservice.accessKeyId"))
sp.setSecret(conf.get("spark.logservice.accessKeySecret"))
sp.setEndpoint(conf.get("spark.logservice.endpoint"))
sp.setProject(conf.get("spark.logservice.project"))
sp.setLogstore(conf.get("spark.logservice.logstore"))
sp.setCursor(LogHubCursorPosition.END_CURSOR)
sp.setGroup("test")
sp.setLevel(StorageLevel.MEMORY_AND_DISK)
sp
}
def main(args: Array[String]) {
val conf = new SparkConf(true).setAppName("LogHubStreamingDemo")
val sc = new SparkContext(conf)
val ssc = new StreamingContext(sc, Durations.seconds(5))
val lines = LoghubUtils.createStream(ssc, buildParam(conf), 1).map(line => {
val str = new String(line)
str
})
val words = lines.flatMap(_.split(" "))
words.foreachRDD(rdd => {
val spark = SparkSessionSingleton.getInstance(rdd.sparkContext.getConf)
import spark.implicits._
rdd.toDF("id").write.mode("append").saveAsTable("test_table")
})
ssc.start() // Start the computation
ssc.awaitTermination() // Wait for the computation to terminate
}
}
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.aliyun.odps.spark.streaming.loghub
import com.aliyun.openservices.loghub.client.config.LogHubCursorPosition
import org.apache.spark.storage.StorageLevel
import org.apache.spark.streaming.loghub.{LoghubUtils, StreamingParam}
import org.apache.spark.streaming.{Durations, StreamingContext}
import org.apache.spark.{SparkConf, SparkContext}
object LogHubStreamingDemo {
def buildParam(conf: SparkConf): StreamingParam = {
val sp = new StreamingParam()
sp.setId(conf.get("spark.logservice.accessKeyId"))
sp.setSecret(conf.get("spark.logservice.accessKeySecret"))
sp.setEndpoint(conf.get("spark.logservice.endpoint"))
sp.setProject(conf.get("spark.logservice.project"))
sp.setLogstore(conf.get("spark.logservice.logstore"))
sp.setCursor(LogHubCursorPosition.END_CURSOR)
sp.setGroup("test")
sp.setLevel(StorageLevel.MEMORY_AND_DISK)
sp
}
def main(args: Array[String]) {
val conf = new SparkConf(true).setAppName("LogHubStreamingDemo")
val sc = new SparkContext(conf)
val ssc = new StreamingContext(sc, Durations.seconds(5))
val lines = LoghubUtils.createStream(ssc, buildParam(conf), 1).map(line => {
val str = new String(line)
str
})
val words = lines.flatMap(_.split(" "))
val pairs = words.map(word => (word, 1))
val wordCounts = pairs.reduceByKey(_ + _)
// Print the first ten elements of each RDD generated in this DStream to the console
wordCounts.print()
ssc.start() // Start the computation
ssc.awaitTermination() // Wait for the computation to terminate
}
}
package com.aliyun.odps.spark.structuredStreaming.datahub
import org.apache.spark.sql.SparkSession
object DatahubStructuredStreamingDemo {
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder()
.appName("DatahubStructuredStreamingDemo")
.getOrCreate()
import spark.implicits._
val df = spark
.readStream
.format("datahub")
.option("datahub.endpoint", "http://dh-cn-beijing.aliyun-inc.com")
.option("datahub.project", "zkytest")
.option("datahub.topic", "zkytest")
.option("datahub.AccessId", "******")
.option("datahub.AccessKey", "******")
.option("StartingOffsets", "earliest")
.load()
/** *
* WordCount Demo
*/
// 请使用OSS作为Checkpoint存储
val checkpointLocation = "oss://bucket/checkpoint/"
val lines = df.select($"id").as[String]
val wordCounts = lines.flatMap(_.split(" ")).toDF("word").groupBy("word").count()
val query = wordCounts.writeStream
.outputMode("complete")
.format("console")
.option("checkpointLocation", checkpointLocation)
.start()
query.awaitTermination()
}
}
package com.aliyun.odps.spark.structuredStreaming.kafka
import java.sql.Timestamp
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions.window
object KafkaStructuredStreamingDemo{
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder()
.appName("KafkaStreamingDemo")
.getOrCreate()
import spark.implicits._
val df = spark
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "localhost:9092")
.option("subscribe", "topic")
.load()
/** *
* WordCount Demo
*/
// 请使用OSS作为Checkpoint存储
val checkpointLocation = "oss://bucket/checkpoint/"
val lines = df.selectExpr("cast(value as string)").as[String]
val wordCounts = lines.flatMap(_.split(" ")).toDF("word").groupBy("word").count()
val query = wordCounts.writeStream
.outputMode("complete")
.format("console")
.option("checkpointLocation", checkpointLocation)
.option("path", "query1")
.start()
query.awaitTermination()
/** *
* Windowed WordCount Demo
*/
val wordsWithTimestamp = df.selectExpr("cast(value as string)").as[String]
.flatMap(x => {
val Array(ts, data) = x.split(",")
data.split(" ").map((new Timestamp(ts.toLong), _))
}).as[(Timestamp, String)].toDF("timestamp", "word")
// 请使用OSS作为Checkpoint存储
val checkpointLocation2 = "oss://bucket/checkpoint2/"
val windowedCounts = wordsWithTimestamp
.groupBy(
window($"timestamp", "10 seconds", "5 seconds"),
$"word"
).count()
val query2 = windowedCounts.writeStream
.outputMode("complete")
.format("console")
.option("checkpointLocation", checkpointLocation2)
.start()
query2.awaitTermination()
/** *
* Windowed WordCount with Watermark Demo
*/
// 请使用OSS作为Checkpoint存储
val checkpointLocation3 = "oss://bucket/checkpoint3/"
val windowedCountsWithWatermark = wordsWithTimestamp
.withWatermark("timestamp", "5 seconds")
.groupBy(
window($"timestamp", "6 seconds", "3 seconds"),
$"word"
).count()
val query3 = windowedCountsWithWatermark.writeStream
.outputMode("append")
.format("console")
.option("checkpointLocation", checkpointLocation3)
.start()
query3.awaitTermination()
}
}
package com.aliyun.odps.spark.structuredStreaming.loghub
import org.apache.spark.sql.SparkSession
object LoghubStructuredStreamingDemo {
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder()
.appName("LoghubStructuredStreamingDemo")
.getOrCreate()
import spark.implicits._
val df = spark
.readStream
.format("loghub")
.option("Loghub.Endpoint", "cn-beijing-intranet.log.aliyuncs.com")
.option("Loghub.Project", "zkytest")
.option("Loghub.AccessId", "******")
.option("Loghub.AccessKey", "******")
.option("Loghub.Logstores", "zkytest")
.option("StartingOffsets", "latest")
.load()
/** *
* WordCount Demo
*/
// 请使用OSS作为Checkpoint存储
val checkpointLocation = "oss://bucket/checkpoint"
val lines = df.select($"contents").as[String]
val wordCounts = lines.flatMap(_.split(" ")).toDF("word").groupBy("word").count()
val query = wordCounts.writeStream
.outputMode("complete")
.format("console")
.option("checkpointLocation", checkpointLocation)
.start()
query.awaitTermination()
}
}
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.aliyun.odps.spark.zeppelin
import java.io.{File, FilenameFilter, PrintWriter}
import java.net.{Inet4Address, InetAddress, NetworkInterface, ServerSocket}
import java.util.concurrent.{ScheduledExecutorService, ScheduledThreadPoolExecutor, TimeUnit}
import com.aliyun.odps.cupid.CupidSession
import com.aliyun.odps.cupid.requestcupid.CupidProxyTokenUtil
import com.google.common.util.concurrent.ThreadFactoryBuilder
import org.apache.hadoop.fs.{FileSystem, Path}
import org.apache.log4j.Logger
import org.apache.spark.sql.SparkSession
import org.apache.zeppelin.interpreter.remote.RemoteInterpreterServer
import scala.collection.JavaConverters._
import scala.io.Source
import scala.sys.process.Process
object ZeppelinServer {
def newDaemonSingleThreadScheduledExecutor(threadName: String): ScheduledExecutorService = {
val threadFactory = new ThreadFactoryBuilder().setDaemon(true).setNameFormat(threadName).build()
val executor = new ScheduledThreadPoolExecutor(1, threadFactory)
// By default, a cancelled task is not automatically removed from the work queue until its delay
// elapses. We have to enable it manually.
executor.setRemoveOnCancelPolicy(true)
executor
}
private val LOG = Logger.getLogger(ZeppelinServer.getClass)
// zeppelin package location
val zeppelinHome = s"${new File(".").getCanonicalPath}/" +
s"public.zeppelin-0.8.1-bin-netinst.tar.gz/" +
s"zeppelin-0.8.1-bin-netinst/"
val fixedReplOutputDir = "/home/admin/replClassOutputDir"
val pool = newDaemonSingleThreadScheduledExecutor("link4replClassOutputDir")
def getRandomPort(): Int = {
val socket = new ServerSocket(0)
val port = socket.getLocalPort
socket.close()
port
}
/**
* COPY from spark source code.
* @return
*/
def findLocalInetAddress(): InetAddress = {
val defaultIpOverride = System.getenv("SPARK_LOCAL_IP")
if (defaultIpOverride != null) {
InetAddress.getByName(defaultIpOverride)
} else {
val address = InetAddress.getLocalHost
if (address.isLoopbackAddress) {
// Address resolves to something like 127.0.1.1, which happens on Debian; try to find
// a better address using the local network interfaces
// getNetworkInterfaces returns ifs in reverse order compared to ifconfig output order
// on unix-like system. On windows, it returns in index order.
// It's more proper to pick ip address following system output order.
val activeNetworkIFs = NetworkInterface.getNetworkInterfaces.asScala.toSeq
val reOrderedNetworkIFs = activeNetworkIFs.reverse
for (ni <- reOrderedNetworkIFs) {
val addresses = ni.getInetAddresses.asScala
.filterNot(addr => addr.isLinkLocalAddress || addr.isLoopbackAddress).toSeq
if (addresses.nonEmpty) {
val addr = addresses.find(_.isInstanceOf[Inet4Address]).getOrElse(addresses.head)
// because of Inet6Address.toHostName may add interface at the end if it knows about it
val strippedAddress = InetAddress.getByAddress(addr.getAddress)
// We've found an address that looks reasonable!
LOG.warn("Your hostname, " + InetAddress.getLocalHost.getHostName + " resolves to" +
" a loopback address: " + address.getHostAddress + "; using " +
strippedAddress.getHostAddress + " instead (on interface " + ni.getName + ")")
LOG.warn("Set SPARK_LOCAL_IP if you need to bind to another address")
return strippedAddress
}
}
LOG.warn("Your hostname, " + InetAddress.getLocalHost.getHostName + " resolves to" +
" a loopback address: " + address.getHostAddress + ", but we couldn't find any" +
" external IP address!")
LOG.warn("Set SPARK_LOCAL_IP if you need to bind to another address")
}
address
}
}
def replaceZeppelinCoreSite(zeppelinPort: Int): Unit = {
Process(s"cp -f ${zeppelinHome}/conf/zeppelin-site.xml.todo ${zeppelinHome}/conf/zeppelin-site.xml").!
val file = new File(s"${zeppelinHome}/conf/zeppelin-site.xml")
val replaceStr = "##zeppelin_port##"
val replaceContent = Source.fromFile(file).mkString.replace(replaceStr, zeppelinPort.toString)
val writer = new PrintWriter(file)
writer.write(replaceContent)
writer.close()
}
def replaceZeppelinInterpreterJson(interpreterPort: Int): Unit = {
Process(s"cp -f ${zeppelinHome}/conf/interpreter.json.todo ${zeppelinHome}/conf/interpreter.json").!
val file = new File(s"${zeppelinHome}/conf/interpreter.json")
val replaceStr = "##interpreter_port##"
val replaceContent = Source.fromFile(file).mkString.replace(replaceStr, interpreterPort.toString)
val writer = new PrintWriter(file)
writer.write(replaceContent)
writer.close()
}
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder()
.config("spark.repl.class.outputDir", fixedReplOutputDir)
.appName("ZeppelinServer")
.getOrCreate()
pool.scheduleWithFixedDelay(
new Runnable {
override def run(): Unit = {
val linkDir = new File(fixedReplOutputDir)
if (linkDir.exists()) {
return
} else {
val tmpDir = new File(System.getProperty("java.io.tmpdir"))
val dirs = tmpDir.list()
for (dir <- dirs) {
if (dir.startsWith("spark")) {
// old interp like this spark-fdf1027a-a006-476c-9abb-c32b9fd784d7
// new interp like this spark8819436304609717444
val tmpDir2 = new File(s"${tmpDir.getAbsolutePath}/${dir}/")
val lineCount = tmpDir2.list(new FilenameFilter {
override def accept(dir: File, name: String): Boolean = {
if (name.startsWith("$line")) {
true
} else {
false
}
}
}).length
if (lineCount > 0) {
val cmd = s"ln -s ${tmpDir.getCanonicalPath}/${dir} ${fixedReplOutputDir}"
LOG.info(s"find repl dir and do link with cmd ${cmd}")
Process(cmd).!
}
}
}
}
}
},
0,
1,
TimeUnit.SECONDS
)
val interpreterServerPort = getRandomPort
val zeppelinPort = getRandomPort
LOG.info(s"interpreterServerPort: ${interpreterServerPort}, zeppelinPort: ${zeppelinPort}")
replaceZeppelinCoreSite(zeppelinPort)
replaceZeppelinInterpreterJson(interpreterServerPort)
val zeppelinAppName = spark.sparkContext.getConf.get("spark.zeppelin.appName", "zeppelin")
// prepare zeppelin end point
val address = findLocalInetAddress()
val zeppelinEndpoint = s"http://${address.getHostAddress}:${zeppelinPort}"
LOG.info(s"zeppelinEndpoint: ${zeppelinEndpoint}")
// write CUPID appName meta info
val metaPanguPath = System.getenv("FUXI_JOB_TEMP_ROOT") + s"../../AppAddresses/${zeppelinAppName}"
val fs = FileSystem.get(spark.sparkContext.hadoopConfiguration)
LOG.info(s"metaPanguPath: ${metaPanguPath}")
val out = fs.create(new Path(metaPanguPath))
out.write(zeppelinEndpoint.getBytes)
out.close()
// generate external url for end user
val cupidProxyEndPoint = spark.sparkContext.getConf
.get("spark.hadoop.odps.cupid.proxy.end.point", "cupid.aliyun-inc.com")
val zeppelinExpiredInHours = spark.sparkContext.getConf
.get("spark.zeppelin.expired.in.hours", "144")
val cupidToken = CupidProxyTokenUtil.getProxyToken(CupidSession.get().getJobLookupName,
zeppelinAppName,
zeppelinExpiredInHours.toInt,
CupidSession.get())
val externalUrl = s"http://${cupidToken}.${cupidProxyEndPoint}"
println(s"Please visit the following url for zeppelin interaction.\n${externalUrl}")
// start zeppelin
// have to reset CLASSPATH to get rid of cupid runtime classpath
// update PATH for hostname sleep nice nohup echo system command
val pathEnv = System.getenv("PATH")
val startZeppelinCmd = s"${zeppelinHome}/bin/zeppelin-daemon.sh start"
Process(startZeppelinCmd, None,
"CLASSPATH" -> "",
"PATH" -> s"${zeppelinHome}/extraPath:${pathEnv}",
"ZEPPELIN_HOME" -> zeppelinHome).!
val interpreter = new RemoteInterpreterServer(null, interpreterServerPort, null)
interpreter.start()
interpreter.join()
System.exit(0)
}
}
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.aliyun.odps.spark.zeppelin
import java.io.{File, FilenameFilter, PrintWriter}
import java.net.{Inet4Address, InetAddress, NetworkInterface, ServerSocket}
import java.util.concurrent.{ScheduledExecutorService, ScheduledThreadPoolExecutor, TimeUnit}
import com.aliyun.odps.cupid.CupidSession
import com.aliyun.odps.cupid.requestcupid.CupidProxyTokenUtil
import com.google.common.util.concurrent.ThreadFactoryBuilder
import org.apache.hadoop.fs.{FileSystem, Path}
import org.apache.log4j.Logger
import org.apache.spark.sql.SparkSession
import org.apache.zeppelin.interpreter.remote.RemoteInterpreterServer
import scala.collection.JavaConverters._
import scala.io.Source
import scala.sys.process.Process
object ZeppelinServerPublic {
def newDaemonSingleThreadScheduledExecutor(threadName: String): ScheduledExecutorService = {
val threadFactory = new ThreadFactoryBuilder().setDaemon(true).setNameFormat(threadName).build()
val executor = new ScheduledThreadPoolExecutor(1, threadFactory)
// By default, a cancelled task is not automatically removed from the work queue until its delay
// elapses. We have to enable it manually.
executor.setRemoveOnCancelPolicy(true)
executor
}
private val LOG = Logger.getLogger(ZeppelinServer.getClass)
// zeppelin package location
val zeppelinHome = s"${new File(".").getCanonicalPath}/" +
s"public.zeppelin-0.8.1-bin-netinst.tar.gz/" +
s"zeppelin-0.8.1-bin-netinst/"
val fixedReplOutputDir = "/home/admin/replClassOutputDir"
val pool = newDaemonSingleThreadScheduledExecutor("link4replClassOutputDir")
def getRandomPort(): Int = {
val socket = new ServerSocket(0)
val port = socket.getLocalPort
socket.close()
port
}
/**
* COPY from spark source code.
* @return
*/
def findLocalInetAddress(): InetAddress = {
val defaultIpOverride = System.getenv("SPARK_LOCAL_IP")
if (defaultIpOverride != null) {
InetAddress.getByName(defaultIpOverride)
} else {
val address = InetAddress.getLocalHost
if (address.isLoopbackAddress) {
// Address resolves to something like 127.0.1.1, which happens on Debian; try to find
// a better address using the local network interfaces
// getNetworkInterfaces returns ifs in reverse order compared to ifconfig output order
// on unix-like system. On windows, it returns in index order.
// It's more proper to pick ip address following system output order.
val activeNetworkIFs = NetworkInterface.getNetworkInterfaces.asScala.toSeq
val reOrderedNetworkIFs = activeNetworkIFs.reverse
for (ni <- reOrderedNetworkIFs) {
val addresses = ni.getInetAddresses.asScala
.filterNot(addr => addr.isLinkLocalAddress || addr.isLoopbackAddress).toSeq
if (addresses.nonEmpty) {
val addr = addresses.find(_.isInstanceOf[Inet4Address]).getOrElse(addresses.head)
// because of Inet6Address.toHostName may add interface at the end if it knows about it
val strippedAddress = InetAddress.getByAddress(addr.getAddress)
// We've found an address that looks reasonable!
LOG.warn("Your hostname, " + InetAddress.getLocalHost.getHostName + " resolves to" +
" a loopback address: " + address.getHostAddress + "; using " +
strippedAddress.getHostAddress + " instead (on interface " + ni.getName + ")")
LOG.warn("Set SPARK_LOCAL_IP if you need to bind to another address")
return strippedAddress
}
}
LOG.warn("Your hostname, " + InetAddress.getLocalHost.getHostName + " resolves to" +
" a loopback address: " + address.getHostAddress + ", but we couldn't find any" +
" external IP address!")
LOG.warn("Set SPARK_LOCAL_IP if you need to bind to another address")
}
address
}
}
def replaceZeppelinCoreSite(zeppelinPort: Int): Unit = {
Process(s"cp -f ${zeppelinHome}/conf/zeppelin-site.xml.todo ${zeppelinHome}/conf/zeppelin-site.xml").!
val file = new File(s"${zeppelinHome}/conf/zeppelin-site.xml")
val replaceStr = "##zeppelin_port##"
val replaceContent = Source.fromFile(file).mkString.replace(replaceStr, zeppelinPort.toString)
val writer = new PrintWriter(file)
writer.write(replaceContent)
writer.close()
}
def replaceZeppelinInterpreterJson(interpreterPort: Int): Unit = {
Process(s"cp -f ${zeppelinHome}/conf/interpreter.json.todo ${zeppelinHome}/conf/interpreter.json").!
val file = new File(s"${zeppelinHome}/conf/interpreter.json")
val replaceStr = "##interpreter_port##"
val replaceContent = Source.fromFile(file).mkString.replace(replaceStr, interpreterPort.toString)
val writer = new PrintWriter(file)
writer.write(replaceContent)
writer.close()
}
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder()
.config("spark.repl.class.outputDir", fixedReplOutputDir)
.appName("ZeppelinServer")
.getOrCreate()
pool.scheduleWithFixedDelay(
new Runnable {
override def run(): Unit = {
val linkDir = new File(fixedReplOutputDir)
if (linkDir.exists()) {
return
} else {
val tmpDir = new File(System.getProperty("java.io.tmpdir"))
val dirs = tmpDir.list()
for (dir <- dirs) {
if (dir.startsWith("spark")) {
// old interp like this spark-fdf1027a-a006-476c-9abb-c32b9fd784d7
// new interp like this spark8819436304609717444
val tmpDir2 = new File(s"${tmpDir.getAbsolutePath}/${dir}/")
val lineCount = tmpDir2.list(new FilenameFilter {
override def accept(dir: File, name: String): Boolean = {
if (name.startsWith("$line")) {
true
} else {
false
}
}
}).length
if (lineCount > 0) {
val cmd = s"ln -s ${tmpDir.getCanonicalPath}/${dir} ${fixedReplOutputDir}"
LOG.info(s"find repl dir and do link with cmd ${cmd}")
Process(cmd).!
}
}
}
}
}
},
0,
1,
TimeUnit.SECONDS
)
val interpreterServerPort = 12345
val zeppelinPort = 54321
LOG.info(s"interpreterServerPort: ${interpreterServerPort}, zeppelinPort: ${zeppelinPort}")
// replaceZeppelinCoreSite(zeppelinPort)
// replaceZeppelinInterpreterJson(interpreterServerPort)
val zeppelinAppName = spark.sparkContext.getConf.get("spark.zeppelin.appName", "zeppelin")
// prepare zeppelin end point
// val address = findLocalInetAddress()
// val zeppelinEndpoint = s"http://${address.getHostAddress}:${zeppelinPort}"
// LOG.info(s"zeppelinEndpoint: ${zeppelinEndpoint}")
// write CUPID appName meta info
// val metaPanguPath = System.getenv("FUXI_JOB_TEMP_ROOT") + s"../../AppAddresses/${zeppelinAppName}"
// val fs = FileSystem.get(spark.sparkContext.hadoopConfiguration)
// LOG.info(s"metaPanguPath: ${metaPanguPath}")
// val out = fs.create(new Path(metaPanguPath))
// out.write(zeppelinEndpoint.getBytes)
// out.close()
// generate external url for end user
val commonProxy = spark.sparkContext.getConf
.get("spark.hadoop.odps.cupid.common.proxy",
"open.maxcompute.aliyun.com")
val externalUrl = s"http://${System.getenv("META_LOOKUP_NAME")}-zeppelin.${commonProxy}"
println(s"Please visit the following url for zeppelin interaction.\n${externalUrl}")
Process(s"cp -r $zeppelinHome/conf /worker/zeppelin_conf").!
Process(s"cp -r $zeppelinHome/notebook /worker/local/notebook").!
Process(s"mv /worker/zeppelin_conf/interpreter.json.public /worker/zeppelin_conf/interpreter.json").!
Process(s"mv /worker/zeppelin_conf/zeppelin-site.xml.public /worker/zeppelin_conf/zeppelin-site.xml").!
// start zeppelin
// have to reset CLASSPATH to get rid of cupid runtime classpath
// update PATH for hostname sleep nice nohup echo system command
val pathEnv = System.getenv("PATH")
val startZeppelinCmd = s"${zeppelinHome}/bin/zeppelin-daemon.sh --config /worker/zeppelin_conf start"
Process(startZeppelinCmd, None,
"CLASSPATH" -> "",
"PATH" -> s"${zeppelinHome}/extraPath:${pathEnv}",
"ZEPPELIN_HOME" -> zeppelinHome,
"ZEPPELIN_LOG_DIR" -> "/worker/zeppelin_logs/",
"ZEPPELIN_PID_DIR" -> "/worker/zeppelin_pids/"
).!
val interpreter = new RemoteInterpreterServer(null, interpreterServerPort, null)
interpreter.start()
interpreter.join()
System.exit(0)
}
}
package config
/**
*
* 埋点流量相关常量配置
* @Author zhenxin.ma
* @Date 2019/8/20 9:43
* @Version 1.0
*/
object MyConfigSession {
//从源表pica_log.picalog_trace_app_part中执行SQL获取源数据,这里获取昨天的
final val SOURCE_SQL: String =
"""
|select pseudo_session,doctor_id,mobile,device_token,user_token_tourist,class_name,view_path,action,
|component_tag,app_version,device_type,device_brand,device_model,network_type,created from pica.picalog_trace_app_part
| where pseudo_session is not null and pseudo_session !=''
| and pseudo_id !='' and extra_info !='com.picahealth.patient' and serviceName != 'trace3'
| and action!='ACTION_WEB_AFTER'
| and FROM_UNIXTIME(cast(substring(created,1,10) as bigint),'yyyy-MM-dd')=created_day and created is not null and created!=''
""".stripMargin //and `action`!='ACTION_EQUIP_INFO'
//Hive的DW层流量表
final val HIVE_TABLE0: String = "pica_ods.ods_log_session_pref"
final val HIVE_TABLE1_TMP: String = "pica_dw.dw_fact_log_session_tmp"
final val HIVE_TABLE2_TMP: String = "pica_dw.dw_fact_log_session_path_tmp"
final val HIVE_TABLE1: String = "pica.dwd_fact_log_session"
final val HIVE_TABLE2: String = "pica_dw.dw_fact_log_session_path"
final val HIVE_TABLE3: String = "pica_dw.dw_fact_log_session_heart"
final val HIVE_TABLE4: String = "pica.dwd_fact_log_session_term"
final val HIVE_TABLE4_MID: String = "pica_dw.dw_fact_log_session_term_mid"
final val HIVE_TABLE5: String = "pica_dw.pathconvertconfig"
final val HIVE_TABLE6: String = "pica_dw.dw_fact_log_session_path_convert"
//写入的文件路径
final val PARQUET_PATH: String = "hdfs://bi-name1:8020/tmp/output/"
//流量表中的临时视图
final val VIEW_SESSION_ODS: String = "ods_session"
final val VIEW_SESSION_NO_MATCH: String = "ods_session_no_user_id"
final val VIEW_MOBILE_PHONE: String = "mobile_phone_match"
final val VIEW_EQUIPMENT_INFO: String = "equipment_info"
final val VIEW_DEVICE_TOKEN: String = "device_token_match"
//流量表中使用的三个字典表作为过滤数据条件
final val ACTION_TYPE_SQL: String = "select action_type,'1' as is_valid from pica.dwd_log_action_type where is_valid=1"
final val ACTION_TYPE_SQL_HEART: String = "select action_type,'1' as is_valid from pica.dwd_log_action_type where action_type='ACTION_HEART_BEAT'"
final val CLASS_NAME_SQL: String = "select class_name, '0' as is_valid from pica.dwd_log_class_name where is_valid=0"
final val MENU_CODE_SQL: String = "select distinct view_path, menu_code from pica.dwd_log_menu_class_code where view_path is not Null"
//流量表中根据action_type获取对应的action_category类型
final val ACTION_CATEGORY_SQL: String = "select action_type,action_category from pica.dwd_log_action_type where is_valid=1"
final val ACTION_CATEGORY_SQL_HEART: String = "select action_type,action_category from pica_dw.dw_dim_log_action_type where action_type='ACTION_HEART_BEAT'"
final val ACTION_URLLABEL_SQL:String = "select url_content,label_value from pica.dwd_log_action_urllabel"
//从源表pica_log.picalog_trace_app_part中执行SQL获取源数据,这里获取昨天的
final val SOURCE_SQL_PREF: String =
"""
|select device_token,pseudo_session,class_name,action,view_path,component_tag,created,mobile,doctor_id,device_brand,device_model,app_version,
|device_type,web_data,web_data_type,alternate_info,network_type,remark1 login_state,remark2 first_app_version,remark3 ,user_token_tourist,serviceName
| from pica_log.picalog_trace_app_part
| where pseudo_session is not null and pseudo_session !=''
| and pseudo_id !='' and extra_info !='com.picahealth.patient' and serviceName != 'trace3'
| and created is not null and created!='' and FROM_UNIXTIME(cast(substring(created,1,10) as bigint),'yyyy-MM-dd')=created_day
""".stripMargin
//从源表pica_log.picalog_trace_app_part中执行SQL获取源数据,输入指定日期参数时执行的SQL
final val SOURCE_SQL_FROM_PREF: String =
s"""
|select pseudo_session,cast(user_id_int as string) user_id,mobile,device_token,user_token , view_class ,view_path,action,action_type,
|component_tag,menu_code,action_code,`position`,label_value,label_class,app_version,device_type,device_brand,device_model,"" device_system,
|net_type,created_time,date_time from ${HIVE_TABLE0}
| where 1=1 and `action`!='ACTION_EQUIP_INFO'
""".stripMargin
//从dw_fact_log_session表中筛选数据
final val SOURCE_SQL_PATH: String =
s"""
|select id log_session_id, session_id,user_id_int user_id,device_token,action_type,user_token,menu_code,action_code,position,label_value,label_class,
|app_version,device_type,created_time,date_time,module_class1,module_class2 from ${MyConfigSession.HIVE_TABLE1}
| where app_version >= '3.1.7'
| AND ((action_type ='ACTION_CLICK' and action_code != 'null' ) OR action_type ='ACTION_VIEW' )
| and (menu_code != '0' and menu_code !='null' and menu_code !='' and (length(menu_code) <= 3 or length(menu_code)=7) )
""".stripMargin
//从dw_fact_log_session_TERM表中筛选数据
final val SOURCE_SQL_PATH_NEW: String =
s"""
|select id log_session_id, session_id, user_id,device_token,action_type,user_token,menu_code,action_code,position,label_value,label_class,action_step,
|app_version,device_type,device_brand,device_model,net_type,created_time,date_time,module_class1,module_class2 from ${MyConfigSession.HIVE_TABLE4}
| where app_version >= '3.1.7'
| AND ((action_type ='ACTION_CLICK' and action_code != 'null' ) OR action_type ='ACTION_VIEW' )
| and (menu_code != '0' and menu_code !='null' and menu_code !='' and (length(menu_code) <= 3 or length(menu_code)=7) and cast(menu_code as int ) is not null)
""".stripMargin
//从pica_dw.pathconvertconfig表中筛选数据
final val SOURCE_SQL_CONFIG: String =
s"""
|select
|projectid,
|nodeid,
|nodename,
|menucode,
|actioncode,
|uv,
|refer_menu_code,
|refer_action_code,
|starttime,
|endtime
|from ${MyConfigSession.HIVE_TABLE5}
""".stripMargin
//从pica_dw.dw_fact_log_session_path_convert表中筛选数据
final val SOURCE_SQL_PATH_CONVERT: String =
s"""
|select
|log_session_id,session_id,user_id,action_type,
|user_token,menu_code,action_code,position,
|label_value,label_class,refer_log_session_id,
|refer_menu_code,refer_action_code,refer_position,
|refer_label_value,refer_time_diff,refer_created,step_id,
|app_version,device_type,device_brand,
|device_model,net_type,created_time,
|date_time,module_class1,module_class2,
|user_identity_id,created_day
|from ${MyConfigSession.HIVE_TABLE6}
""".stripMargin
//从dw_fact_log_session_TERM表中筛选数据
final val SOURCE_PATH_CONVERT: String =
s"""
|select id log_session_id, session_id, user_id,device_token,action_type,user_token,menu_code,action_code,position,label_value,label_class,action_step,
|app_version,device_type,device_brand,device_model,net_type,created_time,date_time,module_class1,module_class2,view_path from ${MyConfigSession.HIVE_TABLE4}
| where app_version >= '3.1.7'
| AND ((action_type ='ACTION_CLICK' and action_code != 'null' ) OR action_type ='ACTION_VIEW' )
| and (menu_code != '0' and menu_code !='null' and menu_code !='' and (length(menu_code) <= 3 or length(menu_code)=7) and cast(menu_code as int ) is not null)
| and menu_code !='499'
""".stripMargin
//匹配user_id的条件
//0.使用pica_ds.pica_doctor表匹配,匹配不上的user_id值为'0'
final val INIT_USER_ID_SQL =
s"""
|SELECT t.session_id, COALESCE(cast(b.id as string),'0') AS user_id, t.mobile, t.device_token, t.user_token,
|t.view_class,t.view_path,t.action_type,t.component_tag, t.menu_code,
|t.action_code, t.position, t.label_value,t.label_class,t.module_class1,t.module_class2,t.app_version,t.device_type,
|t.device_brand, t.device_model, t.device_system,t.net_type,t.created_time,
|t.date_time from ${MyConfigSession.VIEW_SESSION_ODS} as t
|left join pica.ods_pica_p_doctor as b on t.user_id = cast(b.id as string)
""".stripMargin
final val INIT_USER_ID_SQL_PREF =
s"""
|SELECT t.pseudo_session, COALESCE(cast(b.id as string),'0') AS user_id, t.mobile, t.device_token, t.user_token,
|t.view_class,t.view_path,t.action, t.component_tag, t.menu_code,
|t.action_code, t.position, t.label_value,t.label_class,t.app_version,t.device_type,
|t.device_brand, t.device_model, t.net_type,t.created_time,t.date_time,
|t.web_data,t.web_data_type,t.alternate_info,t.login_state,t.first_app_version,t.serviceName
| from ${MyConfigSession.VIEW_SESSION_ODS} as t
|left join pica_ds.pica_doctor as b on t.user_id = cast(b.id as string)
""".stripMargin
//1.针对没有匹配到的user_id,先使用 mobile_phone 进行匹配,得到 user_id 匹配,'0',XK0HdMN6dAfOlYPOFHHL0A==表示''加密之后的mobile
final val MOBILE_PHONE_SQL: String =
s"""
|SELECT ss.session_id, COALESCE(cast(b.id as string),'0') AS user_id, ss.mobile, ss.device_token, ss.user_token,
|ss.view_class,ss.view_path,ss.action_type,ss.component_tag, ss.menu_code,
|ss.action_code, ss.position,ss.label_value,ss.label_class,ss.module_class1,ss.module_class2,ss.app_version, ss.device_type,
|ss.device_brand, ss.device_model,ss.device_system, ss.net_type,ss.created_time,
|ss.date_time from ${MyConfigSession.VIEW_SESSION_NO_MATCH} AS ss
|left join (select distinct id,mobile_phone from pica.ods_pica_p_doctor where ods_pica_p_doctor.delete_flag = 1 and mobile_phone!='' and mobile_phone!='XK0HdMN6dAfOlYPOFHHL0A==' ) AS b on ss.mobile = b.mobile_phone
""".stripMargin
final val MOBILE_PHONE_SQL_PREF: String =
s"""
|SELECT ss.pseudo_session,COALESCE(cast(b.id as string),'0') AS user_id,ss.mobile,ss.device_token,ss.user_token,
|ss.view_class,ss.view_path,ss.action, ss.component_tag,ss.menu_code,
|ss.action_code,ss.position,ss.label_value,ss.label_class,ss.app_version,ss.device_type,
|ss.device_brand,ss.device_model, ss.net_type,ss.created_time,
|ss.date_time,ss.web_data,ss.web_data_type,ss.alternate_info,ss.login_state,ss.first_app_version,ss.serviceName
| from ${MyConfigSession.VIEW_SESSION_NO_MATCH} AS ss
|left join (select distinct id,mobile_phone from pica_ds.pica_doctor where pica_doctor.delete_flag = 1 ) AS b on ss.mobile = b.mobile_phone
""".stripMargin
//2.使用equipment表匹配,默认是昨天的
final val EQUIPMENT_INFO_SQL: String =
"""
|SELECT a.user_id,a.device_token ,ROW_NUMBER() OVER ( PARTITION BY a.device_token ORDER BY a.creat_time DESC ) row_d
|from (select e1.user_id,e1.device_token,e1.creat_time,e1.modify_time,e1.delete_flag from pica.ods_picamessage_p_equipment_info e1 union
| select e2.user_id,e2.device_token,e2.creat_time, e2.modify_time,e2.delete_flag from pica.ods_picamessage_p_equipment_info_shadow e2 ) a
| where a.user_id IS NOT NULL and a.user_id>0 and a.delete_flag=1 and device_token is not null
| AND (to_date(a.creat_time) = date_sub(current_date(),1) OR to_date(a.modify_time) = date_sub(current_date(),1))
""".stripMargin
//注意:1.使用equipment表匹配,如果匹配的是历史指定日期的数据,那么需要使用不同的表和下面这个SQL表,限定stat_date日期
final val EQUIPMENT_INFO_SQL_ARGS: String =
"""
|SELECT a.doctor_id as user_id, a.device_token, ROW_NUMBER() OVER (PARTITION BY a.device_token ORDER BY a.creat_time DESC) row_d
| from pica.dwd_study_zipper_picams_equipment_info AS a where a.doctor_id IS NOT NULL AND a.stat_date=
""".stripMargin
//先和equiment表进行匹配,使用 device_token 匹配,得到 user_id 匹配,'0'
final val DEVICE_TOKEN_SQL: String =
s"""
|SELECT t.session_id, COALESCE(cast(b.user_id as string),'0') AS user_id, t.mobile, t.device_token, t.user_token,
|t.view_class,t.view_path,t.action_type,t.component_tag, t.menu_code,
|t.action_code, t.position, t.label_value,t.label_class,t.module_class1,t.module_class2,t.app_version,t.device_type,
|t.device_brand, t.device_model, t.device_system,t.net_type,t.created_time,
|t.date_time from (select * from ${MyConfigSession.VIEW_MOBILE_PHONE} a where a.user_id= '0' ) as t
|left join ${MyConfigSession.VIEW_EQUIPMENT_INFO} as b on t.device_token = b.device_token
""".stripMargin
final val DEVICE_TOKEN_SQL_PREF: String =
s"""
|SELECT t.pseudo_session,COALESCE(cast(b.user_id as string),'0') AS user_id,t.mobile,t.device_token,t.user_token,
|t.view_class,t.view_path,t.action ,t.component_tag,t.menu_code,
|t.action_code,t.position,t.label_value,t.label_class,t.app_version,t.device_type,
|t.device_brand,t.device_model, t.net_type,t.created_time,
|t.date_time,t.web_data,t.web_data_type,t.alternate_info,t.login_state,t.first_app_version,t.serviceName
| from (select * from ${MyConfigSession.VIEW_MOBILE_PHONE} a where a.user_id= '0' ) as t
|left join ${MyConfigSession.VIEW_EQUIPMENT_INFO} as b on t.device_token = b.device_token
""".stripMargin
//sessionGap时间,切割 session 的依据,30 minutes
final val SESSION_GAP: Long = 30 * 60 * 1000
//分隔符
final val DELIMITER: String = "\001"
//hdfs127 Mysql配置,记录任务的执行情况
final val JDBC_DRIVER = "com.mysql.jdbc.Driver"
final val DATA_BASE = "pica_job"
final val JDBC_URL = s"jdbc:mysql://hdfs127:3306/${DATA_BASE}?useTimezone=true&serverTimezone=GMT%2B8"
final val JDBC_USERNAME = "pica_spider"
final val JDBC_PSSWORD = "5$7FXgz#e5JWP08e"
final val JDBC_TABLE = "schedule_job_record"
final val mysql_url_user_profile="jdbc:mysql://hdfs127:3306/user_profile?useTimezone=true&serverTimezone=GMT%2B8"
final val mysql_username_user_profile="bi_admin"
final val mysql_password_user_profile="5$7FXgz#e5JWP08e"
final val MENU_CODE_VIEW_PATH_SQL: String = "select distinct full_path view_path, menu_code from pica_ds.pica_bi_bi_menu_code_h5 where full_path is not Null"
}
package utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 日期时间工具类
* @Author zhenxin.ma
* @Date 2019/8/29 17:28
* @Version 1.0
*/
public class DateUtils {
public static final SimpleDateFormat TIME_FORMAT =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static final SimpleDateFormat DATE_FORMAT =
new SimpleDateFormat("yyyy-MM-dd");
public static ThreadLocal<SimpleDateFormat> simpleDateFormatThreadLocal=new ThreadLocal<SimpleDateFormat>(){
@Override
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
};
/**
* 判断一个时间是否在另一个时间之前
* @param time1 第一个时间
* @param time2 第二个时间
* @return 判断结果
*/
public static boolean before(String time1, String time2) {
try {
Date dateTime1 = TIME_FORMAT.parse(time1);
Date dateTime2 = TIME_FORMAT.parse(time2);
if(dateTime1.before(dateTime2)) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 判断一个时间是否在另一个时间之后
* @param time1 第一个时间
* @param time2 第二个时间
* @return 判断结果
*/
public static boolean after(String time1, String time2) {
try {
Date dateTime1 = TIME_FORMAT.parse(time1);
Date dateTime2 = TIME_FORMAT.parse(time2);
if(dateTime1.after(dateTime2)) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 计算时间差值(单位为秒)
* @param time1 时间1
* @param time2 时间2
* @return 差值
*/
public static int minus(String time1, String time2) {
try {
Date datetime1 = TIME_FORMAT.parse(time1);
Date datetime2 = TIME_FORMAT.parse(time2);
long millisecond = datetime1.getTime() - datetime2.getTime();
return Integer.valueOf(String.valueOf(millisecond / 1000));
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
/**
* 获取年月日和小时
* @param datetime 时间(yyyy-MM-dd HH:mm:ss)
* @return 结果
*/
public static String getDateHour(String datetime) {
String date = datetime.split(" ")[0];
String hourMinuteSecond = datetime.split(" ")[1];
String hour = hourMinuteSecond.split(":")[0];
return date + "_" + hour;
}
/**
* @Description 毫秒转换成标准时间 yyyy-MM-dd HH:mm:ss
* @param time 传入的参数,毫秒时间
* @return java.lang.String
**/
public static String milliSecondsFormatTime(String time){
if (time == null || time.isEmpty()) {
return "";
}
Date tmpDate = new Date();
tmpDate.setTime(Long.parseLong(time));
String dtime = simpleDateFormatThreadLocal.get().format(tmpDate);
return dtime;
}
/**
* 获取昨天的日期(yyyy-MM-dd)
* @return 昨天的日期
*/
public static String getYesterdayDate() {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -1);
Date date = cal.getTime();
return DATE_FORMAT.format(date);
}
/**
* 获取当天日期(yyyy-MM-dd)
* @return 当天日期
*/
public static String getTodayDate() {
return DATE_FORMAT.format(new Date());
}
/**
* @Description 获取当天的时间:yyyy-MM-dd HH:mm:ss
* @param
* @return java.lang.String
**/
public static String getTodayTime() {
return simpleDateFormatThreadLocal.get().format(new Date());
}
// /**
// * @Description 获取昨天的日期:yyyy-MM-dd HH:mm:ss
// * @param gapDay
// * @return java.lang.String
// **/
// public static String getYesterdayTime(int gapDay){
// Calendar calendar=Calendar.getInstance();
// calendar.set(Calendar.HOUR_OF_DAY,24*gapDay);
// String yesterdayDate=simpleDateFormatThreadLocal.get().format(calendar.getTime());
// return yesterdayDate;
// }
/**
* 格式化日期(yyyy-MM-dd)
* @param date Date对象
* @return 格式化后的日期
*/
public static String formatDate(Date date) {
return DATE_FORMAT.format(date);
}
/**
* 格式化时间(yyyy-MM-dd HH:mm:ss)
* @param date Date对象
* @return 格式化后的时间
*/
public static String formatTime(Date date) {
return TIME_FORMAT.format(date);
}
/**
* @Description 日期解析
* @param time 格式化的时间(yyyy-MM-dd HH:mm:ss)
* @return java.util.Date
**/
public static Date parseTime(String time)
{
try {
Date result=simpleDateFormatThreadLocal.get().parse(time);
simpleDateFormatThreadLocal.remove();
return result;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
final Date date = new Date();
System.out.println(date);
System.out.println(parseTime("2020-03-30 11:45:18"));
System.out.println(formatDate(date));
System.out.println(formatTime(date));
System.out.println(getYesterdayDate());
String com = "005#";
final String[] strs = com.split("#");
System.out.println("length is "+strs.length);
System.out.println("0位数据是: "+strs[0]);
}
}
package utils
import java.lang.reflect.{Field, Modifier}
import java.text.SimpleDateFormat
import java.util.Locale
import scala.util.control.Breaks._
object MyBeanUtils {
/**
* 对象相同属性copy
*
* @param obj
* @param toResult
* @return
* @throws Exception
* 转换报错
*/
def copyProperties(obj: Object, toResult: Object): Unit = {
if (obj == null) {
return
}
try {
val fields = toResult.getClass.getDeclaredFields
for (field <- fields) {
breakable {
field.setAccessible(true) //修改访问权限
if (Modifier.isFinal(field.getModifiers()))
break
if (isWrapType(field)) {
val getMethodName = field.getName()
val setMethodName = field.getName()+"_$eq"
val getMethod = {
try {
obj.getClass().getMethod(getMethodName)
} catch {
case ex: Exception =>
// println(ex)
break
}
}
//从源对象获取get方法
val setMethod =
toResult.getClass.getMethod(setMethodName, field.getType)
//从目标对象获取set方法
val value = {
val objValue = getMethod.invoke(obj) // get 获取的是源对象的值
if (objValue != null && objValue.isInstanceOf[java.util.Date]) {
// GMT时间转时间戳
val format =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH)
val formatValue = format.format(objValue)
java.lang.Long.valueOf(format.parse(formatValue).getTime)
} else
objValue
}
setMethod.invoke(toResult, value)
}
}
}
} catch {
case ex: Exception => throw ex
}
}
/**
* 是否是基本类型、包装类型、String类型
*/
def isWrapType(field: Field): Boolean = {
val typeList = List[String]("java.lang.Integer"
, "java.lang.Double", "java.lang.Float", "java.lang.Long", "java.util.Optional"
, "java.lang.Short", "java.lang.Byte", "java.lang.Boolean", "java.lang.Char"
, "java.lang.String", "int", "double", "long"
, "short", "byte", "boolean", "char", "float")
if (typeList.contains(field.getType().getName())) true else false
}
def getV(ref:AnyRef, name: String): Any = ref.getClass.getMethods.find(_.getName == name).get.invoke(ref)
def setV(ref:AnyRef,name: String, value: Any): Unit = {
ref.getClass.getMethods.find(_.getName == name + "_$eq").get.invoke(ref, value.asInstanceOf[AnyRef])
}
}
package utils
import java.lang.reflect.Field
import java.sql.{Connection, DriverManager, PreparedStatement, ResultSet, ResultSetMetaData, Statement}
import com.alibaba.fastjson.JSONObject
import com.google.common.base.CaseFormat
import config.MyConfigSession
import scala.collection.mutable.ListBuffer
object MySqlUtil {
def main(args: Array[String]): Unit = {
// val mysql_tablename = "r_project_doctor_certificate_log"
// val hive_table="pica.pica_project_x_gpr_doctor_certificate"
// val mc_table="pica.dws_gpranking_x_gpr_doctor_certificate"
// val list: java.util.List[JSONObject] = queryList(s"show create table ${mysql_tablename}"
// ,MyConfigSession.mysql_url_user_profile)
// import collection.JavaConverters._
// val profileListScala = list.asScala
// println("profileListScala"+profileListScala)
//// var index = 0 //插入新增标识
//// val tbbuffer = new StringBuilder
//// val tbbuffer2 = new StringBuilder
//// tbbuffer.append("where ")
//// for(profile <- profileListScala) {
//// val s: JSONObject = profile
////
//// if (!profile.getString("COLUMN_NAME").equals("id") && !profile.getString("COLUMN_NAME").contains("log_date") && !profile.getString("COLUMN_NAME").contains("times")
//// && !profile.getString("COLUMN_NAME").contains("delete_flag") && !profile.getString("COLUMN_NAME").contains("created_id")
//// && !profile.getString("COLUMN_NAME").contains("created_time") && !profile.getString("COLUMN_NAME").contains("modified_id")
//// && !profile.getString("COLUMN_NAME").contains("modified_time")) {
//// if (index != 0) {
//// tbbuffer.append("\n")
//// tbbuffer.append("or ")
//// }
//// if (profile.getString("COLUMN_TYPE").contains("varchar")) {
//// tbbuffer.append(s"NVL(A.${profile.getString("COLUMN_NAME")}, '') != NVL(B.${profile.getString("COLUMN_NAME")}, '')")
//// } else if (profile.getString("COLUMN_TYPE").contains("int")) {
//// tbbuffer.append(s"NVL(A.${profile.getString("COLUMN_NAME")}, -1) != NVL(B.${profile.getString("COLUMN_NAME")}, -1)")
//// } else {
//// tbbuffer.append(s"NVL(A.${profile.getString("COLUMN_NAME")}, '') != NVL(B.${profile.getString("COLUMN_NAME")}, '')")
//// }
//// tbbuffer2.append(s"case when NVL(A.${profile.getString("COLUMN_NAME")}, '') != NVL(B.${profile.getString("COLUMN_NAME")}, '') THEN concat(NVL(A.${profile.getString("COLUMN_NAME")}, 'null'),'##',NVL(B.${profile.getString("COLUMN_NAME")}, 'null')) END AS ${profile.getString("COLUMN_NAME")} , \n")
////
//// index += 1
//// }
////
//// }
////// println(tbbuffer)
////// println(tbbuffer2)
////
//// val tbbuffer3 = new StringBuilder
//// tbbuffer3.append("select ").append(tbbuffer2.toString())
//// .append(s"from ${hive_table} as A \n join ${mc_table} as b \n")
//// .append(tbbuffer)
//// println(tbbuffer3)
}
// private val properties: Properties = MyPropertiesUtil.load("myconfig.properties")
val MYSQL_URL = MyConfigSession.mysql_url_user_profile
val MYSQL_USERNAME = MyConfigSession.mysql_username_user_profile
val MYSQL_PASSWORD = MyConfigSession.mysql_password_user_profile
// val MYSQL_URL = "jdbc:mysql://rm-nf9p0m7e89sji2n8ijo.mysql.rds.aliyuncs.com:3306/pica_report?useTimezone=true&serverTimezone=GMT%2B8"
// val MYSQL_USERNAME = "pica_report_w"
// val MYSQL_PASSWORD = "lsHB!%@cPGJOfw0E"
def queryList(sql: String,mySqlUrl:String): java.util.List[JSONObject] = {
Class.forName("com.mysql.jdbc.Driver")
//创建结果列表
val resultList: java.util.List[JSONObject] = new java.util.ArrayList[JSONObject]()
println("mySqlUrl:"+mySqlUrl)
println("MYSQL_USERNAME:"+MYSQL_USERNAME)
println("MYSQL_PASSWORD:"+MYSQL_PASSWORD)
//创建连接
val conn: Connection = DriverManager.getConnection(mySqlUrl, MYSQL_USERNAME, MYSQL_PASSWORD)
//创建会话
val stat: Statement = conn.createStatement
// println(sql)
//提交sql 返回结果
val rs: ResultSet = stat.executeQuery(sql)
//为了获得列名 要取得元数据
val md: ResultSetMetaData = rs.getMetaData
while (rs.next) {
val rowData = new JSONObject();
for (i <- 1 to md.getColumnCount) {
// 根据下标得到对应元数据中的字段名,以及结果中值
rowData.put(md.getColumnName(i), rs.getObject(i))
}
resultList.add(rowData)
}
stat.close()
conn.close()
resultList
}
def queryList[T<:AnyRef](sql: String, clazz: Class[T], underScoreToCamel: Boolean):List[T]={
Class.forName("com.mysql.jdbc.Driver");
val resultList: ListBuffer[T] = new ListBuffer[T]();
val connection: Connection = DriverManager.getConnection(MYSQL_URL, MYSQL_USERNAME, MYSQL_PASSWORD)
val stat: Statement = connection.createStatement();
val rs: ResultSet = stat.executeQuery(sql);
val md: ResultSetMetaData = rs.getMetaData();
while (rs.next()) {
val obj: T = clazz.newInstance()
for (i <- 1 to md.getColumnCount) {
var propertyName: String = md.getColumnLabel(i)
if (underScoreToCamel) {
propertyName = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, md.getColumnLabel(i))
}
MyBeanUtils.setV(obj,propertyName,rs.getObject(i))
}
resultList.append(obj);
}
stat.close()
connection.close()
resultList.toList
}
def queryOne[T<:AnyRef](sql: String, clazz: Class[T] ,
underScoreToCamel: Boolean,mySql_URL:String): Option[T] ={
println(sql)
Class.forName("com.mysql.jdbc.Driver");
val resultList: ListBuffer[T] = new ListBuffer[T]();
val connection: Connection =
DriverManager.getConnection(mySql_URL, MYSQL_USERNAME, MYSQL_PASSWORD)
val stat: Statement = connection.createStatement();
val rs: ResultSet = stat.executeQuery(sql);
val md: ResultSetMetaData = rs.getMetaData();
while (rs.next()) {
val obj: T = clazz.newInstance()
for (i <- 1 to md.getColumnCount) {
var propertyName: String = md.getColumnName(i)
if (underScoreToCamel) {
propertyName =
CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, md.getColumnName(i))
}
MyBeanUtils.setV(obj,propertyName,rs.getObject(i))
}
resultList.append(obj);
}
stat.close()
connection.close()
if(resultList!=null){
Some(resultList(0))
}else{
None
}
}
def queryOne[T<:AnyRef](sql: String,mySql_URL:String): Option[JSONObject] ={
Class.forName("com.mysql.jdbc.Driver")
//创建结果列表
val resultList: java.util.List[JSONObject] = new java.util.ArrayList[JSONObject]()
//创建连接
val conn: Connection = DriverManager.getConnection(mySql_URL, MYSQL_USERNAME, MYSQL_PASSWORD)
//创建会话
val stat: Statement = conn.createStatement
println(sql)
//提交sql 返回结果
val rs: ResultSet = stat.executeQuery(sql)
//为了获得列名 要取得元数据
val md: ResultSetMetaData = rs.getMetaData
while (rs.next) {
val rowData = new JSONObject();
for (i <- 1 to md.getColumnCount) {
// 根据下标得到对应元数据中的字段名,以及结果中值
rowData.put(md.getColumnName(i), rs.getObject(i))
}
resultList.add(rowData)
}
stat.close()
conn.close()
if(resultList!=null){
Some(resultList.get(0))
}else{
None
}
}
def insertOne[T](sql: String, obj:T ): Unit ={
Class.forName("com.mysql.jdbc.Driver");
val resultList: ListBuffer[T] = new ListBuffer[T]();
val connection: Connection =
DriverManager.getConnection(MYSQL_URL, MYSQL_USERNAME, MYSQL_PASSWORD)
val pstat: PreparedStatement = connection.prepareStatement(sql)
val fields: Array[Field] = obj.getClass.getDeclaredFields
for(i<- 1 to fields.size){
val field:Field = fields(i-1);
field.setAccessible(true)
val value: AnyRef = field.get(obj)
pstat.setObject(i,value)
}
val resInsert = pstat.execute()
println("插入数据,返回值=>" + resInsert)
}
}
package utils;
import java.math.BigDecimal;
/**
* 数字格工具类
* @Author zhenxin.ma
* @Date 2020/3/30 14:05
* @Version 1.0
*/
public class NumberUtils {
/**
* 格式化小数
* @param num 数字
* @param scale 四舍五入的位数
* @return 格式化小数
*/
public static double formatDouble(double num, int scale) {
BigDecimal bd = new BigDecimal(num);
return bd.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
package utils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
/**
* 参数工具类
* @Author zhenxin.ma
* @Date 2020/3/30 14:09
* @Version 1.0
*/
public class ParamUtils {
/**
* 从命令行参数中提取任务id
* @param args 命令行参数
* @return 任务id
*/
public static Long getTaskIdFromArgs(String[] args) {
try {
if(args != null && args.length > 0) {
return Long.valueOf(args[0]);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 从JSON对象中提取参数
* @param jsonObject JSON对象
* @return 参数
*/
public static String getParam(JSONObject jsonObject, String field) {
JSONArray jsonArray = jsonObject.getJSONArray(field);
if(jsonArray != null && jsonArray.size() > 0) {
return jsonArray.getString(0);
}
return null;
}
}
package utils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
/**
* 读取HDFS配置文件
* @Author zhenxin.ma
* @Date 2020/1/2 14:50
* @Version 1.0
*/
public class PropertiesUtil {
public static Map<String, String> propertiesMap = new HashMap();
static {
//HDFS配置文件路径
String hdfsPropertiesPath = "/user/big-data/script/config2/config.properties";
System.out.println("hdfsPropertiesPath is :" +hdfsPropertiesPath);
BufferedReader br =null;
try {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path path = new Path(hdfsPropertiesPath);
FSDataInputStream fsDataInputStream = fs.open(path);
br = new BufferedReader(new InputStreamReader(fsDataInputStream));
String line = null;
while ((line = br.readLine()) != null) {
if(line.contains("=") && !line.trim().startsWith("#")){
//只替换第一个"="号
String rline =line.replaceFirst("="," ");
propertiesMap.put(rline.split(" ")[0].trim(),rline.split(" ")[1].trim());
}
}
//判断运行环境
if("online".equals(propertiesMap.get("spark.model"))){
System.out.println("propertiesMap:" + propertiesMap);
}
} catch (Exception e){
e.printStackTrace();
} finally {
try {
if (br !=null) {
br.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
package utils;
import java.math.BigDecimal;
/**
* 字符串工具类
* @Author zhenxin.ma
* @Date 2020/3/30 15:35
* @Version 1.0
*/
public class StringUtils {
/**
* 判断字符串是否为空
* @param str 字符串
* @return 是否为空
*/
public static boolean isEmpty(String str) {
return str == null || "".equals(str);
}
/**
* 判断字符串是否为数值
* @param str 字符串
* @return 是否数值
*/
public static boolean isNumeric(String str) {
String bigStr;
try {
bigStr = new BigDecimal(str).toString();
} catch (Exception e) {
return false;//异常 说明包含非数字。
}
return true;
}
/**
* 判断字符串是否不为空
* @param str 字符串
* @return 是否不为空
*/
public static boolean isNotEmpty(String str) {
return str != null && !"".equals(str);
}
/**
* 判断字符串是否为null,如果是,那么给字符串设置默认值"";否则返回原值
* @param str 字符串
* @return java.lang.String 返回字符串值
**/
public static String getNotNullString(String str) {
if (isEmpty(str)) {
return "";
}
return str;
}
/**
* 截断字符串两侧的逗号
* @param str 字符串
* @return 字符串
*/
public static String trimComma(String str) {
if(str.startsWith(",")) {
str = str.substring(1);
}
if(str.endsWith(",")) {
str = str.substring(0, str.length() - 1);
}
return str;
}
/**
* 补全两位数字
* @param str
* @return
*/
public static String fulfuill(String str) {
if(str.length() == 2) {
return str;
} else {
return "0" + str;
}
}
/**
* 从拼接的字符串中提取字段
* @param str 字符串
* @param delimiter 分隔符
* @param field 字段
* @return 字段值
*/
public static String getFieldFromConcatString(String str,
String delimiter, String field) {
String[] fields = str.split(delimiter);
for(String concatField : fields) {
if(concatField.split("=").length==2) {
String fieldName = concatField.split("=")[0];
String fieldValue = concatField.split("=")[1];
if (fieldName.equals(field)) {
return fieldValue;
}
}
}
return null;
}
/**
* 从拼接的字符串中给字段设置值
* @param str 字符串
* @param delimiter 分隔符
* @param field 字段名
* @param newFieldValue 新的field值
* @return 字段值
*/
public static String setFieldInConcatString(String str,
String delimiter, String field, String newFieldValue) {
String[] fields = str.split(delimiter);
for(int i = 0; i < fields.length; i++) {
String fieldName = fields[i].split("=")[0];
if(fieldName.equals(field)) {
String concatField = fieldName + "=" + newFieldValue;
fields[i] = concatField;
break;
}
}
StringBuffer buffer = new StringBuffer("");
for(int i = 0; i < fields.length; i++) {
buffer.append(fields[i]);
if(i < fields.length - 1) {
buffer.append("|");
}
}
return buffer.toString();
}
}
package utils
import java.sql.{Connection, DriverManager}
import java.util.{Properties, UUID}
import org.apache.spark.broadcast.Broadcast
import org.apache.spark.serializer.KryoSerializer
import org.apache.spark.sql.{Column, DataFrame, Row, SaveMode, SparkSession}
import org.apache.spark.{SparkConf, SparkContext}
/**
* @Author zhenxin.ma
* @Date 2019/8/30 11:59
* @Version 1.0
*/
object UseUtil {
def getUUID(): String = {
val uuid: String = UUID.randomUUID().toString().replaceAll("-", "").toLowerCase
uuid
}
//给DF增加列
def addDataFrameColumn(df:DataFrame , map: Map[String,Column]): DataFrame={
var result: DataFrame = df
map.foreach(it => {
result = result.withColumn(it._1,it._2)
})
result
}
/**
* @Description //TODO
* @param net NotNull
* @return java.lang.String
**/
def netTypeMatch(net: String): String = {
var net_type: String = null
net match {
case "2G" => net_type = "2"
case "3G" => net_type = "3"
case "4G" => net_type = "4"
case "5G" => net_type = "5"
case "6G" => net_type = "6"
case "2G/3G/4G" => net_type = "4"
case "2G/3G/4G/5G" => net_type = "5"
case "2G/3G/4G/5G/6G" => net_type = "6"
case "WIFI" => net_type = "1"
case "WLAN" => net_type = "1"
case _:Any => net_type = "0"
}
net_type
}
//Spark 任务设置配置
def setConfigure(conf: SparkConf): Unit = {
conf.set("spark.serializer", classOf[KryoSerializer].getName)
// 序列化时使用的内存缓冲区大小
conf.set("spark.kryoserializer.buffer.max", "128m")
// 启用rdd压缩
conf.set("spark.rdd.compress", "true")
// 设置压缩格式为snappy, 默认也就是lz4, 这种压缩格式压缩比高, 速度快, 但是耗费的内存相对也多一些
conf.set("spark.io.compression.codec", "snappy")
// 设置压缩时使用的内存缓冲区大小
conf.set("spark.io.compression.snappy.blockSize", "64k")
// spark sql 在shuffle时产生的partition数量, 默认是200
conf.set("spark.sql.shuffle.partitions", "200")
// SortShuffleManager开启by-pass(不需要排序)模式的阈值, 默认为200, 在partition数量小于这个值时会开启by-pass模式
conf.set("spark.shuffle.sort.bypassMergeThreshold", "210")
//调节持久化的内存比例
conf.set("spark.memory.useLegacyMode", "true")
//设置shuffle过程中一个task拉取到上个stage的task的输出后,进行聚合操作时能够使用的Executor内存的比例,默认是0.2
//shuffle操作比较多时,适当增加这个值,增加task执行需要的内存
conf.set("spark.shuffle.memoryFraction","0.5")
// rdd默认的并行度
conf.set("spark.default.parallelism", "200")
// shuffle溢写缓冲区, 默认32k, 在内存充足的情况下可以适当增加
conf.set("spark.shuffle.file.buffer", "64k")
// shuffle read task的buffer缓冲大小, 这个缓冲区大小决定了read task每次能拉取的数据量, 在内存充足的情况下可以适当增加
conf.set("spark.reducer.maxSizeInFlight", "96m")
//设置字符串
conf.set("spark.debug.maxToStringFields","100")
//启用自动设置 Shuffle Reducer,默认false
conf.set("spark.sql.adaptive.enabled","true")
}
/**
* @Description 读取配置表,筛选符合的action_type类型
* @param action
* @return java.lang.String
**/
def getActionType(action:String): String = {
var actionType: String = action
actionType match {
case "ACTION_APP_BACKGROUND" => actionType = "ACTION_BACKGROUND"
case "ACTION_CLICK" => actionType = "ACTION_CLICK"
case "ACTION_WEB_CLICK" => actionType = "ACTION_CLICK"
case "WEB_ACTION_CLICK" => actionType = "ACTION_CLICK"
case "ACTION_EQUIP_INFO" => actionType = "ACTION_EQUIP_INFO"
case "ACTION_EXIT_APP" => actionType = "ACTION_EXIT"
case "ACTION_PAGE_EXPOSE" => actionType = "ACTION_EXPOSE"
case "ACTION_RECENT_APPS" => actionType = "ACTION_RECENT"
case "ACTION_APP_START" => actionType = "ACTION_START"
case "ACTION_ACTIVITY_CREATE" => actionType = "ACTION_VIEW"
case "ACTION_LOAD_URL" => actionType = "ACTION_VIEW"
case "ACTION_WEB_ENTER" => actionType = "ACTION_VIEW"
case "ACTION_WEB_PAGE_IN" => actionType = "ACTION_VIEW"
case _ => actionType =" "
}
actionType
}
/**
* @Description 根据SQL获取广播变量
* @param sparkSession
* @param sourSql
* @param colName1
* @param colName2
* @return org.apache.spark.broadcast.Broadcast<scala.collection.immutable.Map<java.lang.String,java.lang.Object>>
**/
def getBroadcast(sparkSession: SparkSession,sourSql: String,colName1: String,colName2: String):Broadcast[Map[String,String]] = {
import sparkSession.implicits._
val df: DataFrame = sparkSession.sql(sourSql)
val map: Map[String, String] = df.map(row => {
(row.getAs[String](colName1), row.getAs[String](colName2))
}).collect().toMap
val broad: Broadcast[Map[String, String]] = sparkSession.sparkContext.broadcast(map)
broad
}
/**
* 将DataFrame保存为Mysql表
* @param dataFrame 需要保存的dataFrame
* @param tableName 保存的mysql 表名
* @param saveMode 保存的模式 :Append、Overwrite、ErrorIfExists、Ignore
* @param proPath 配置文件的路径
*/
def saveASMysqlTable(dataFrame: DataFrame, tableName: String, saveMode: SaveMode, proPath: String) = {
var table = tableName
val properties: Properties = getProPerties(proPath)
val prop = new Properties //配置文件中的key 与 spark 中的 key 不同 所以创建prop 按照spark 的格式 进行配置数据库
prop.setProperty("user", properties.getProperty("mysql.username"))
prop.setProperty("password", properties.getProperty("mysql.password"))
prop.setProperty("driver", properties.getProperty("mysql.driver"))
prop.setProperty("url", properties.getProperty("mysql.url"))
if (saveMode == SaveMode.Overwrite) {
var conn: Connection = null
try {
conn = DriverManager.getConnection(
prop.getProperty("url"),
prop.getProperty("user"),
prop.getProperty("password")
)
val stmt = conn.createStatement
table = table.toUpperCase
stmt.execute(s"truncate table $table") //此操作的目的是在覆盖的时候不删除原来的表,避免数据的类型全部变为TEXT类型
conn.close()
}
catch {
case e: Exception =>
println("MySQL Error:")
e.printStackTrace()
}
}
dataFrame.write.mode(SaveMode.Append).jdbc(prop.getProperty("url"), tableName, prop)
}
/**
* 获取配置文件
* @param proPath 配置文件路径,放在resources目录下,路径为: /myconfig.properties
* @return
*/
def getProPerties(proPath: String): Properties = {
val properties: Properties = new Properties()
properties.load(this.getClass.getResourceAsStream(proPath))
properties
}
}
package utils;
/**
* @Author zhenxin.ma
* @Date 2020/3/30 15:37
* @Version 1.0
*/
public class ValidUtils {
/**
* 校验数据中的指定字段,是否在指定范围内
* @param data 数据
* @param dataField 数据字段
* @param parameter 参数
* @param startParamField 起始参数字段
* @param endParamField 结束参数字段
* @return 校验结果
*/
public static boolean between(String data, String dataField,
String parameter, String startParamField, String endParamField) {
String startParamFieldStr = StringUtils.getFieldFromConcatString(
parameter, "\\|", startParamField);
String endParamFieldStr = StringUtils.getFieldFromConcatString(
parameter, "\\|", endParamField);
if(startParamFieldStr == null || endParamFieldStr == null) {
return true;
}
int startParamFieldValue = Integer.valueOf(startParamFieldStr);
int endParamFieldValue = Integer.valueOf(endParamFieldStr);
String dataFieldStr = StringUtils.getFieldFromConcatString(
data, "\\|", dataField);
if(dataFieldStr != null) {
int dataFieldValue = Integer.valueOf(dataFieldStr);
if(dataFieldValue >= startParamFieldValue &&
dataFieldValue <= endParamFieldValue) {
return true;
} else {
return false;
}
}
return false;
}
/**
* 校验数据中的指定字段,是否有值与参数字段的值相同
* @param data 数据
* @param dataField 数据字段
* @param parameter 参数
* @param paramField 参数字段
* @return 校验结果
*/
public static boolean in(String data, String dataField,
String parameter, String paramField) {
String paramFieldValue = StringUtils.getFieldFromConcatString(
parameter, "\\|", paramField);
if(paramFieldValue == null) {
return true;
}
String[] paramFieldValueSplited = paramFieldValue.split(",");
String dataFieldValue = StringUtils.getFieldFromConcatString(
data, "\\|", dataField);
if(dataFieldValue != null) {
String[] dataFieldValueSplited = dataFieldValue.split(",");
for(String singleDataFieldValue : dataFieldValueSplited) {
for(String singleParamFieldValue : paramFieldValueSplited) {
if(singleDataFieldValue.equals(singleParamFieldValue)) {
return true;
}
}
}
}
return false;
}
/**
* 校验数据中的指定字段,是否在指定范围内
* @param data 数据
* @param dataField 数据字段
* @param parameter 参数
* @param paramField 参数字段
* @return 校验结果
*/
public static boolean equal(String data, String dataField,
String parameter, String paramField) {
String paramFieldValue = StringUtils.getFieldFromConcatString(
parameter, "\\|", paramField);
if(paramFieldValue == null) {
return true;
}
String dataFieldValue = StringUtils.getFieldFromConcatString(
data, "\\|", dataField);
if(dataFieldValue != null) {
if(dataFieldValue.equals(paramFieldValue)) {
return true;
}
}
return false;
}
}
package utils;
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;
/**
* 通用工具类
* @Author zhenxin.ma
* @Date 2019/9/18 15:16
* @Version 1.0
*/
public class commonUtil {
/**
* 判断是否为空,支持字符串、map、集合、数组和其它对象
*
* @param obj 判断的对象
* @return 为空返回True,不为空返回False
*/
public static boolean isEmpty(Object obj){
if(obj == null){
return true;
}else if (obj instanceof String){
return "".equals(String.valueOf(obj).trim());
}else if (obj instanceof Map<?,?>){
return ((Map<?,?>) obj).isEmpty();
}else if (obj instanceof Collection<?>){
return ((Collection<?>) obj).isEmpty();
}else if (obj.getClass().isArray()){
return Array.getLength(obj) == 0;
}
return false;
}
/**
* 判断是否为空,支持字符串、map、集合、数组和其它对象
*
* @param obj 判断的对象
* @return 为空返回False,不为空返回True
*/
public static boolean isNotEmpty(Object obj){
return !isEmpty(obj);
}
}
.
\ No newline at end of file
#Generated by Maven
#Wed Jun 08 16:07:15 CST 2022
version=1.0.0-SNAPSHOT
groupId=com.aliyun.odps
artifactId=spark-session_2.11
D:\Users\Pica\worker\MaxCompute-Spark\spark-2.x\src\main\java\com\aliyun\odps\spark\sparksql\JavaSparkSQL.java
D:\Users\Pica\worker\MaxCompute-Spark\spark-2.x\src\main\java\com\aliyun\odps\spark\utils\ConfigLog4j2.java
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册