问题标签 [hive-serde]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hive - Cloudera Hue - 在 serde 属性规范中无法识别“WITH”“SERDEPROPERTIES”“(”附近的输入
我正在尝试创建此表:
但是我遇到了一个问题:
编译语句时出错:FAILED: ParseException line 14:2 cannot identify input near 'WITH' 'SERDEPROPERTIES' '(' in serde properties specification
我该如何解决?
谢谢!
apache-spark-sql - 将数据从 HDFS/S3 移植到本地 FS 并在 Java 中加载
我在 EMr 集群上运行了一个 Spark 作业,该作业将 DataFrame 写入 HDFS(然后将其s3-dist-cp
-ed 写入S3
)。数据量不大(另存为 2 GB parquet
)。然后将 S3 中的这些数据复制到本地文件系统(运行 Linux 的 EC2 实例),然后加载到 Java 应用程序中。
事实证明,我无法获取parquet
格式数据,因为 parquet 是为 HDFS 设计的,不能在本地 FS 中使用(如果我错了,请指出有关如何在本地 FS 上读取 parquet 文件的资源)。
我可以使用什么其他格式来解决这个问题?Avro 是否足够紧凑,并且不会通过将模式与数据帧的每一行打包来破坏数据的大小?
regex - 使用 serde 正则表达式在 hive 表中加载日志数据为 null
我想解析这个日志样本
5 月 3 日 11:52:54 cdh-dn03 init: tty (/dev/tty6) 主进程 (1208) 被 TERM 信号杀死
5 月 3 日 11:53:31 cdh-dn03 内核:已注册 taskstats 版本 1
5 月 3 日 11:53:31 cdh-dn03 内核:sr0:scsi3-mmc 驱动器:32x/32x xa/form2 托盘
5 月 3 日 11:53:31 cdh-dn03 kernel: piix4_smbus 0000:00:07.0: SMBus base address uninitialized - 升级 BIOS 或使用 force_addr=0xaddr
5 月 3 日 11:53:31 cdh-dn03 内核:nf_conntrack 版本 0.5.0(7972 个桶,最大 31888 个)
5 月 3 日 11:53:57 cdh-dn03 内核:hrtimer:中断耗时 11250457 ns
5 月 3 日 11:53:59 cdh-dn03 ntpd_initres[1705]:找不到主机名:0.rhel.pool.ntp.org
这就是我创建表并将数据加载到其中的方式
我正在使用这些网站来生成正则表达式
这两个是我正在使用的正则表达式
(\w{3})\s+(\w{1})\s+(\S+)\s+(\S+)\s+(\S+)\s+((\S+.)*)
(^(\S+))\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+((\S+.)*)
加载数据并选择
输出为空
蜂巢> 从 LogParserSample 中选择 *;
好的
NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL
耗时:0.094 秒,获取:7 行
刚接触蜂巢所以不知道到底是什么问题
hadoop - 使用 XMLSerDe 错误将 XML 数据加载到配置单元表中:java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException
我想解析这个 xml 文件:-
这就是我创建表并将数据加载到其中的方式:-
当我试图通过表格进行选择时,出现以下错误:
蜂巢>从艺术家数据xml中选择*;失败并出现异常 java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException: 评估艺术家姓名时出错
json - Hive SerDe 使用 JSON 推文返回错误 Flume
我正在使用 Flume 收集 Twitter 流数据并将其以 JSON 格式存储在 HDFS 中。我正在尝试使用 Hive SerDe 将此 twitter 数据放入 Hive 表中,但我遇到了一个非常令人沮丧的错误。
任何帮助,将不胜感激。
hive - 未找到 Serde hows 类的 XML 摄取到 Hive 表中的问题
我正在尝试将一个简单的 xml 摄取到配置单元表中。表创建良好,但在该表上执行选择查询或任何其他查询时出现以下错误:
org.apache.hive.service.cli.HiveSQLException:编译语句时出错:FAILED:RuntimeException java.lang.ClassNotFoundException:com.ibm.spss.hive.serde2.xml.XmlInputFormat
我关注了这篇文章。
这里有什么问题?
我可以看到添加了 jar 文件。
并且 jar 文件具有我遇到错误的类。
hadoop - Hive SerDe initialize() 函数调用了 8 次
我正在编写一个自定义 Hive SerDe,它可以读取存储为 ORC 的数据。
基础表包含一个 event_map 列 MAP。SerDe 从 event_map 列读取数据,并在经过一些额外处理后将它们分解为单独的列。例如:地图将是 {'key1': 'val1', 'key2': 'val2'}。
然后我将创建一个外部表,如:
然后,SerDe 会找到“key1”和“key2”列,并将其从底层映射中提取出来,并将它们作为单独的列而不是 MAP 公开。我知道我们可以通过配置单元查询来扩展此列,但为简单起见提供此示例。即 SerDe 将检查表 DDL 是否将 key1 作为列,并将从 event_map 中提取 key1 并将其用于该列。
大部分处理都在 serde 的 deserialize() 函数中。但是,我注意到我的 initialize() 方法被调用了 8 次。
这是为什么?每行调用一次反序列化,这是有道理的,但重复调用初始化。
此外,SerDe 可以通过“列”属性访问输出表模式,它也可以访问查询吗?
例如:如果我的查询是
serde 能知道我们只需要读取 key1 并跳过对 key2 的处理吗?
hadoop - 自定义 Hive SerDe 无法选择列,但在我执行 SELECT * 时有效
我正在编写一个自定义 SerDe,并且只会使用它来反序列化。底层数据是一个 thrift 二进制文件,每一行都是一个事件日志。每个事件都有一个我可以访问的模式,但是我们将事件包装在另一个模式中,让我们Message
在存储之前调用它。我编写 SerDe 而不是使用ThriftDeserializer的原因是因为如前所述,底层事件被包装为消息。所以我们首先需要使用 的模式进行反序列化Message
,然后反序列化该事件的数据。
SerDe(仅)在我执行 a 时起作用,SELECT *
并且我可以按预期反序列化数据,但是每当我从表中选择一列而不是 SELECT * 时,这些行都是 NULL。返回的对象检查ThriftStructObjectInspector
器是一个,反序列化返回的对象是一个 TBase。
什么可能导致 Hive 在我们选择列时返回 NULL,但在我执行 SELECT * 时返回列数据?
这是 SerDe 类(更改了一些类名):
代码上下文:
- 在底层数据中,每一行仅包含 1 列(称为 event_binary),以二进制形式存储。二进制文件是一个包含 2 个字段“schema”+“event_data”的消息。即每一行都是一条消息,其中包含底层事件的模式+数据。我们使用 Message 中的模式来反序列化数据。
- SerDe 首先将行反序列化为消息,提取事件数据,然后反序列化事件。
我创建了一个指向 Thrift 数据的外部表,使用
然后SELECT * FROM dev_db.thrift_event_data_deserialized LIMIT 10;
按预期工作但是,SELECT column1_name, column2_name FROM dev_db.thrift_event_data_deserialized LIMIT 10;
不起作用。
知道我在这里缺少什么吗?希望有任何帮助!
sql - hive 1.2 sql 返回意外的特殊字符
运行以下 Hive 查询会返回特殊字符:
它返回结果为
它是一个已知的蜂巢虫吗?
解释计划
在这里禁用或启用配置参数可以帮助我吗?
如果我反转最外层选择中的列顺序,则查询返回预期结果。我本来希望结果是
颜色量
蓝色6203
红色7716
hive - 为什么 hive 在 Join 操作期间不选择 SerDe JAR?
hadoop 版本:Hadoop 2.6.0-cdh5.12.2 配置单元版本:Hive 1.1.0-cdh5.12.2
考虑两个表: products - 存储产品 ID 和有关产品活动的其他详细信息 - 存储 user_id,product_id 告诉哪个用户购买了哪个产品和其他交易详细信息。
在创建这些表之前,我使用以下命令添加了 SerDe JAR: add jar /home/ManojKumarM_R/json-serde-1.3-jar-with-dependencies.jar;
/user/ManojKumarM_R/ProductsMergeEnrichOut 中的样本数据
{"Id":"P101", "Name":"Round Tee", "Reseller":"Nike", "Category":"Top Wear", "Price":2195.03, "Discount":21.09, "Profit_percent" :23.47}
{"Id":"P102", "Name":"Half Shift", "Reseller":"Nike", "Category":"Top Wear", "Price":1563.84, "Discount":23.83, "Profit_percent" :17.12}
/user/ManojKumarM_R/ActivityMergeEnrichOut/ 中的样本数据
{"Product_id":"P117", "User_id":"U148", "Cancellation":"TRUE", "Return":"NA", "Cancellation_reason":"重复产品", "Return_reason":"NA", "Order_date":"2016-02-12", "Shipment_date":"NA", "Delivery_date":"NA", "Cancellation_date":"2018-05-20", "Return_date":"NA"}
{"Product_id":null, "User_id":"U189", "Cancellation":"FALSE", "Return":"FALSE", "Cancellation_reason":"NA", "Return_reason":"NA", "Order_date" :"2017-04-22", "Shipment_date":"2017-05-05", "Delivery_date":"2017-09-09", "Cancellation_date":"NA", "Return_date":"NA"}
表创建成功,
&
查询工作得很好,因此表示在选择查询期间选择了 SerDe JAR。
但是,当我运行以下连接查询时:我想将这两个表连接到一个公共列上,即 Product Id
它失败并显示以下消息
执行日志在:/tmp/ManojKumarM_R/ManojKumarM_R_20181010124747_690490ae-e59f-4e9d-9159-5c6a6e28b951.log 2018-10-10 12:47:43 开始启动本地任务来处理map join;最大内存 = 2058354688 执行失败,退出状态:2 获取错误信息
任务失败!任务 ID:第 5 阶段
登录 /tmp/ManojKumarM_R/ManojKumarM_R_20181010124747_690490ae-e59f-4e9d-9159-5c6a6e28b951.log
2018-10-10 12:47:43,984 错误 [main]: mr.MapredLocalTask (MapredLocalTask.java:executeInProcess(398)) - Hive 运行时错误:映射本地工作失败 org.apache.hadoop.hive.ql.metadata.HiveException : 异常 java.lang.ClassNotFoundException: org.openx.data.jsonserde.JsonSerDejava.lang.RuntimeException: java.lang.ClassNotFoundException: org.openx.data.jsonserde.JsonSerDe at org.apache.hadoop.hive.ql 失败。 plan.TableDesc.getDeserializerClass(TableDesc.java:73)
这表示 Hive 无法找到 JsonSerDe JAR,即使我在该 hive 会话期间添加了 JAR 并且 selct 查询工作正常。如果有人解决了类似的问题,请告诉我,我不确定 Hive 在 JOIN 操作期间是否在不同的目录中查找 JAR。