除了编写自定义 UDF 来支持此问题之外,是否还有任何已知的方法可以实现此目的?我目前使用的是 Hive 0.13。
每次我运行一个包含来自 java 程序的 OR 条件的 hive 查询时,我都会收到以下错误,
引起原因:java.lang.ClassCastException:org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableStringObjectInspector无法转换为org.apache.hadoop.hive.serde2.objectinspector.primitive.BooleanObjectInspector。 hive.ql.udf.generic.GenericUDFOPOr.initialize(GenericUDFOPOr.java:53) 位于 org.apache.hadoop.hive.ql.udf.generic.GenericUDF.initializeAndFoldConstants(GenericUDF.java:117) 位于 org.apache.hadoop。 hive.ql.plan.ExprNodeGenericFuncDesc.newInstance(ExprNodeGenericFuncDesc.java:232) 位于 org.apache.hadoop.hive.ql.parse.TypeCheckProcFactory$DefaultExprProcessor.getXpathOrFuncExprNodeDesc(TypeCheckProcFactory.java:958) 位于 org.apache.hadoop.hive。 ql.parse.TypeCheckProcFactory$DefaultExprProcessor.process(TypeCheckProcFactory.java:1175) 位于 org.apache.hadoop.hive.ql.lib.DefaultRuleDispatcher.dispatch(DefaultRuleDispatcher.java:90) 位于 org.apache.hadoop.hive.ql。 lib.DefaultGraphWalker.dispatchAndReturn(DefaultGraphWalker.java:94) 在 org.apache.hadoop.hive.ql.lib.DefaultGraphWalker.dispatch(DefaultGraphWalker.java:78) 在 org.apache.hadoop.hive.ql.lib.DefaultGraphWalker。步行(DefaultGraphWalker.java:132)在org.apache.hadoop.hive.ql.lib.DefaultGraphWalker.startWalking(DefaultGraphWalker.java:109)在org.apache.hadoop.hive.ql.parse.TypeCheckProcFactory.genExprNode(TypeCheckProcFactory。 java:192)在org.apache.hadoop.hive.ql.parse.TypeCheckProcFactory.genExprNode(TypeCheckProcFactory.java:145)在org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genAllExprNodeDesc(SemanticAnalyzer.java:10650)在 org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genExprNodeDesc(SemanticAnalyzer.java:10606) 在 org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genExprNodeDesc(SemanticAnalyzer.java:10577) 在 org.apache .hadoop.hive.ql.parse.SemanticAnalyzer.genFilterPlan(SemanticAnalyzer.java:2736) 在 org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genFilterPlan(SemanticAnalyzer.java:2717) 在 org.apache.hadoop.hive .ql.parse.SemanticAnalyzer.genBodyPlan(SemanticAnalyzer.java:8972) 在 org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9884) 在 org.apache.hadoop.hive.ql.parse .SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9777)在org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genOPTree(SemanticAnalyzer.java:10250)在org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal (SemanticAnalyzer.java:10261)在org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:10141)在org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java :222)在org.apache.hadoop.hive.ql.Driver.compile(Driver.java:430)在org.apache.hadoop.hive.ql.Driver.compile(Driver.java:305)在org.apache。 hadoop.hive.ql.Driver.compileInternal(Driver.java:1123) 在 org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1110) 在 org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperation.java:99) ... 26 更多
但是当我尝试运行以下java程序只是为了测试转换时,它转换成功了。
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.BooleanObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableStringObjectInspector;
public class MyClass {
    public static void main(String[] args) {
         ObjectInspector[] arguments = new ObjectInspector[2];
        BooleanObjectInspector boi0 = …Run Code Online (Sandbox Code Playgroud) 我想在许多不同的维度上聚合一列。我认为 GOUPING SETS 适合我的问题,但我无法弄清楚如何从 GROUPING SETS 转换/重塑结果表。
这是我使用 GROUPING SETS 的查询:
select date, dim1, dim2, dim3, sum(value) as sum_value
from table
grouping by date, dim1, dim2, dim3
grouping sets ((date, dim1), (date, dim2), (date, dim3))
Run Code Online (Sandbox Code Playgroud)
查询将生成如下表:
date        dim1    dim2    dim3    sum_value
2017-01-01  A       NULL    NULL    [value_A]
2017-01-01  B       NULL    NULL    [value_B]
2017-01-01  NULL    C       NULL    [value_C]
2017-01-01  NULL    D       NULL    [value_D]
2017-01-01  NULL    NULL    E       [value_E]
2017-01-01  NULL    NULL    F       [value_F]
Run Code Online (Sandbox Code Playgroud)
但我真正需要的是这样一张桌子:
date        dim     factor  sum_value
2017-01-01  dim1     A      [value_A] …Run Code Online (Sandbox Code Playgroud) 我正在尝试规范化配置单元中的列,这意味着我必须使列中的每个值除以该列中的最大值.例如:我有一张桌子X:
A   B   C   D
1  0.1  3  0.2
2  0.2  4  0.5
3  0.3  5  0.2
Run Code Online (Sandbox Code Playgroud)
我想规范化列C,请求的表Y是:
A   B    C    D
1  0.1  0.6  0.2
2  0.2  0.8  0.5
3  0.3   1   0.2
Run Code Online (Sandbox Code Playgroud)
我不知道如何编写SQL来表示整列的最大值.
我有一个数据集,其中一列中包含一些具有无效条目的行。
我试图从 B 列和 C 列中选择所有不同的行,但 B 列有无效条目。A 列中的字符串包含 B 列的正确名称,因此如果我能弄清楚如何选择 str(b) 在 str(a) 中的所有行,那么我最终应该只得到正确的数据。
伪代码可能如下所示:
SELECT DISTINCT b,c FROM some.log WHERE date = 'today' AND str(b) IN str(a)
Run Code Online (Sandbox Code Playgroud)
我知道如何使用 Python 来解决这个问题,但每一行的 A 列都是唯一的。因此,如果我选择不同的行并包含 A 列,我实际上只是选择了所有行,这会产生一个 60gb 的文件。
python 代码如下所示:
df = df[df.apply(lambda x: x.name in x.url, axis=1)]
Run Code Online (Sandbox Code Playgroud)
这会导致这样的事情:
df
a                         b        c
/bobs/burgers/1234        bobs     idx 
/bobs/burgers/2234        fred     idx
/cindys/sandwhiches/3234  cindy    idx
df = df[df.apply(lambda x: x.name in x.url, axis=1)]
a                         b        c
/bobs/burgers/1234        bobs     idx
/cindys/sandwhiches/3234  cindy    idx
Run Code Online (Sandbox Code Playgroud)
是否可以使用 …
我有一些关于 HDFS 的数据,我正在尝试设置这些数据以通过 hive 进行查询。数据采用逗号分隔的文本文件的形式。文件中的一列是日期/时间列,如下所示:
Wed Aug 29 16:16:58 CDT 2018
Run Code Online (Sandbox Code Playgroud)
当我尝试读取使用以下脚本创建的 Hive 表时,我得到 NULL 作为为此列读取的值。
use test_db;
drop table ORDERS;
create external table ORDERS(
    SAMPLE_DT_TM TIMESTAMP
    ...
)
row format delimited
fields terminated by ',' 
stored as textfile
location '/user/data';
Run Code Online (Sandbox Code Playgroud)
当我用 STRING 替换 TIMESTAMP 时,我能够读取列值。但不确定如何将其作为 Hive 支持的适当日期格式读取...
我试图在 spark 中生成一列空值,但不是空数据类型。
所以
sqlContext.sql("select null as newcol from db.table")
Run Code Online (Sandbox Code Playgroud)
将不起作用,因为它会将 newcol 数据类型设置为 null。
sqlContext.sql("select cast(null as newcol as string) from db.table")
Run Code Online (Sandbox Code Playgroud)
将不起作用,因为它将使所有值“空”作为 4 个字符的字符串表示形式。
我怎样才能做到这一点?
最终目标是将其写入 csv,它不支持空列类型,我需要数据框中的实际值为空而不是空字符串。
我的配置单元表中有一个数据类型为布尔值的列。当我尝试从 csv 导入数据时,它存储为 NULL。
这是我的示例表:
CREATE tABLE if not exists Engineanalysis(
EngineModel String,
EnginePartNo String ,
Location String,
Position String,
InspectionReq boolean)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';
Run Code Online (Sandbox Code Playgroud)
我的样本数据:
AB01,AS01-IT01,AIRFRAME,,0
AB02,AS01-IT02,AIRFRAME,,1
AB03,AS01-IT03,AIRFRAME,,1
AB04,AS01-IT04,AIRFRAME,,1
AB05,AS01-IT05,HEAD,,1
AB06,AS01-IT06,HEAD,,0
AB07,AS01-IT07,HEAD,,0
AB08,AS01-IT08,HEAD,,0
AB09,AS01-IT09,NOSE,,1
AB10,AS01-IT10,NOSE,,0
Run Code Online (Sandbox Code Playgroud)
结果 :
AB01 AS01-IT01 AIRFRAME NULL
AB02 AS01-IT02 AIRFRAME NULL
AB03 AS01-IT03 AIRFRAME NULL
AB04 AS01-IT04 AIRFRAME NULL
AB05 AS01-IT05 HEAD NULL
AB06 AS01-IT06 HEAD NULL
AB07 AS01-IT07 HEAD NULL
AB08 AS01-IT08 HEAD NULL
AB09 AS01-IT09 …Run Code Online (Sandbox Code Playgroud) I am trying to get data from a table that has column name as: year_2016, year_2017, year_2018 etc. I am not sure how to get the data from this table. The data looks like:
| count_of_accidents | year_2016 | year_2017 |year_2018 | 
|--------------------|-----------|-----------|----------|
| 15                 | 12        | 5         | 1        |
| 5                  | 10        | 6         | 18       |
Run Code Online (Sandbox Code Playgroud)
I have tried 'concat' function but this doesn't really work.
I have tried with this:
| count_of_accidents | year_2016 …Run Code Online (Sandbox Code Playgroud) 我试图加入两个表:
表十
PlayerID   | Name      | Team
007        | Sancho    | Dortmund
010        | Messi     | Barcelona
011        | Werner    | Chelsea
001        | De Gea    | Man Utd
009        | Lewan..ki | Bayern Mun
006        | Pogba     | Man Utd
017        | De Bruyne | Man City
029        | Harvertz  | Chelsea
005        | Upamecano | Leipzig
Run Code Online (Sandbox Code Playgroud)
表 Y
PlayerID.   |Name      | Team
010         | Messi    | Man City
007         | Sancho   | Man Utd
006         | Pogba    | …Run Code Online (Sandbox Code Playgroud)