sql—将csv支持的Dataframe转换为配置单元表将失去多行支持

8hhllhi2  于 2021-06-24  发布在  Hive
关注(0)|答案(0)|浏览(198)

我有一个csv文件的名称和长格式的消息数据。消息数据采用多行格式,数据中嵌入了新行。字段已被引用,我已成功地将其解析为sparkDataframe,如下所示:

scala> val df =spark.read.option("parserLib", "univocity")
.option("multiLine", true)
.option("header", true)
.option("inferSchema", true)
.option("quoteAll", true)
.csv("/data.csv");
df: org.apache.spark.sql.DataFrame = [Name: string, Message: string ... 17 more fields]

这将在 Name 列:

scala> df.limit(10).select("Name").show
+-------+
|   Name|
+-------+
| foobar|
| foobar|
| foobar|
| foobar|
| foobar|
| foobar|
| foobar|
| foobar|
| foobar|
| foobar|
+-------+

当我尝试将其转换为配置单元表时,会出现问题:

scala> df.createOrReplaceTempView("events")
scala> sqlContext.sql("create table s_events as select * from events");
res52: org.apache.spark.sql.DataFrame = []

现在显示数据表明csv解析器不再转义嵌入的换行符,而是将它们作为行分隔符进行解析:

scala> sqlContext.sql("select Name from s_events limit 10").show();
+--------------------+
|                Name|
+--------------------+
|              foobar|
|              foobar|
|              foobar|
|              foobar|
|              foobar|
|Sent: Tuesday, 30...|
|To: 'personxyz   ...|
|Subject: RE: ABSD...|
|                    |
|     Hello Person,  |
+--------------------+

以前,我尝试过直接在hive中加载,但是hive得到了相同的结果。一些google告诉我,对于csv中不支持多行记录的配置单元,解决方法是如上所述通过spark进行侧加载,但这似乎也不起作用。
有没有办法让hive相信引用区域中的换行符现在是行分隔符,或者在尝试加载数据之前需要清除数据?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题