我正在尝试使用Spark Java将DataSet写入Hive数据库,但在此过程中我遇到了异常。
这是我的代码:
tr
此处,String endpoint = "https://www.example.com/m/auth/"
String username = "user123";
String password = "12345";
String credentials = username + ":" + password;
final String basic =
"Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
Request request = new Request.Builder()
.url(endpoint)
.header("Authorization", basic)
.build();
OkHttpClient client = SomeUtilFactoryClass.buildOkhttpClient();
client.newCall(request).enqueue(new Callback() {
...
是流式json数据,我可以通过以下命令打印结果 Dataset<Row> data = spark.read().json(rdd).select("event.event_name");
data.write().mode("overwrite").saveAsTable("telecom.t2");
。
rdd
但是当我尝试将此结果写入Hive数据库时,我没有得到任何异常,但是当我尝试打印这些值时,我在data
中得到了Exception。例如:
data.show();
例外是:
Hive command line
答案 0 :(得分:1)
当您调用parquet.snappy
时,Spark默认以saveAsTable
格式保存数据,而且您似乎在hive库路径中没有snappy。更改编写器格式(例如更改为json
)将不起作用,因为Hive期望使用此选项创建表中的序列文件。
但您可以在将数据保存为表格之前更改压缩算法:
spark.conf.set("spark.sql.parquet.compression.codec", "gzip")
默认情况下,应该在Hive上提供Gzip压缩,如果出现任何问题,您仍然可以在不压缩的情况下保存数据:
spark.conf.set("spark.sql.parquet.compression.codec", "uncompressed")
答案 1 :(得分:0)
此错误
org.xerial.snappy.SnappyError:[FAILED_TO_LOAD_NATIVE_LIBRARY] null
与snappy问题https://github.com/xerial/snappy-java/issues/6
有关在本期的最后评论中,有一种解决方法:
unzip snappy-java-1.0.4.1.jar
cd org/xerial/snappy/native/Mac/x86_64/
cp libsnappyjava.jnilib libsnappyjava.dylib
cd ../../../../../..
cp snappy-java-1.0.4.1.jar snappy-java-1.0.4.1.jar.old
jar cf snappy-java-1.0.4.1.jar org