我有一个postgress表,其中包含文本列( detail )。我已在Hive中将 detail 声明为STRING。当我尝试从SQOOP或SPark导入它时,它已成功导入。但是我遗漏了许多详细列中的数据,并且在hive表中创建了很多空行。
有人可以帮我吗?
Ex:详细信息列具有以下数据
line1 sdhfdsf dsfdsdfdsf dsfs
line2 jbdfv df ffdkjbfd
jbdsjbfds dsfsdfb dsfds
dfds dsfdsfds dsfdsdskjnfds
sdjfbdsfdsdsfds
只有“ line1 sdhfdsf dsfdsdfdsf dsfs ”才会导入hive表。
我可以看到剩余行的空行。
答案 0 :(得分:1)
Hive不支持文本文件格式的多行。您必须将此数据加载到二进制文件Avro或Parquet中,以保留换行符。如果您不需要保留它们,那么您可以使用hive-drop-import-delims剥离它们
答案 1 :(得分:0)
这是解决方案
SparkConf sparkConf = new SparkConf().setAppName("HiveSparkSQL");
SparkContext sc = new SparkContext(sparkConf);
HiveContext sqlContext= new HiveContext(sc);
sqlContext.setConf("spark.sql.parquet.binaryAsString","true");
String url="jdbc:postgresql://host:5432/dbname?user=**&password=***";
Map<String, String> options = new HashMap<String, String>();
options.put("url", url);
options.put("dbtable", "(select * from abc.table limit 50) as act1");
options.put("driver", "org.postgresql.Driver");
DataFrame jdbcDF = sqlContext.read().format("jdbc").options(options).load();
jdbcDF.write().format("parquet").mode(SaveMode.Append).saveAsTable("act_parquet");