小编Ama*_*nda的帖子

在 Hive 中使用 CASCADE 的 ADD COLUMN 的确切行为

假设下一个表:

sch_test.test_cascade
    a    b    c
    -----------
    6    10   1
    6    10   1
    6    10   2
    6    10   2
Run Code Online (Sandbox Code Playgroud)

a、b 和 c 是整数,表由 c 分区。当我使用 CASCADE 在 Hive 中添加一列时:

ALTER TABLE sch_test.test_cascade ADD COLUMNS (d int, e int) CASCADE;
Run Code Online (Sandbox Code Playgroud)

它返回下一个表:

sch_test.test_cascade
a    b    d    e     c
-------------------------
6    10   1    NULL  1    
6    10   1    NULL  1  
6    10   2    NULL  2  
6    10   2    NULL  2
Run Code Online (Sandbox Code Playgroud)

也就是说,第一个插入的列(在本例中为 d)采用分区列的值(请注意,我添加了两列以显示第二列为 NULL)。但是,如果我添加一个没有 CASCADE 的列:

ALTER TABLE sch_test.test_cascade ADD COLUMNS (d int, e int); …
Run Code Online (Sandbox Code Playgroud)

hive alter

5
推荐指数
1
解决办法
7376
查看次数

随机旋转PySpark DataFrame行会抛出NullPointedException

假设下一个PySpark DataFrame:

+-------+----+---+---+----+
|user_id|type| d1| d2|  d3|
+-------+----+---+---+----+
|     c1|   A|3.4|0.4| 3.5|
|     c1|   B|9.6|0.0| 0.0|
|     c1|   A|2.8|0.4| 0.3|
|     c1|   B|5.4|0.2|0.11|
|     c2|   A|0.0|9.7| 0.3|
|     c2|   B|9.6|8.6| 0.1|
|     c2|   A|7.3|9.1| 7.0|
|     c2|   B|0.7|6.4| 4.3|
+-------+----+---+---+----+
Run Code Online (Sandbox Code Playgroud)

创建时:

df = sc.parallelize([
    ("c1", "A", 3.4, 0.4, 3.5), 
    ("c1", "B", 9.6, 0.0, 0.0),
    ("c1", "A", 2.8, 0.4, 0.3),
    ("c1", "B", 5.4, 0.2, 0.11),
    ("c2", "A", 0.0, 9.7, 0.3), 
    ("c2", "B", 9.6, 8.6, 0.1),
    ("c2", "A", 7.3, 9.1, 7.0),
    ("c2", …
Run Code Online (Sandbox Code Playgroud)

apache-spark-sql pyspark

5
推荐指数
0
解决办法
131
查看次数

PySpark中的自定义评估器

我想使用排名指标(MAP @ k)优化PySpark管道的超级参数。我已经在文档中看到了如何使用评估(Scala)中定义的指标,但是由于尚未实现MAP @ k,因此我需要定义一个自定义的评估器类。所以我需要做类似的事情:

model = Pipeline(stages=[indexer, assembler, scaler, lg])
paramGrid_lg = ParamGridBuilder() \
    .addGrid(lg.regParam, [0.001, 0.1]) \
    .addGrid(lg.elasticNetParam, [0, 1]) \
    .build()

crossval_lg = CrossValidator(estimator=model,
                      estimatorParamMaps=paramGrid_lg,
                      evaluator=MAPkEvaluator(), 
                      numFolds=2)
Run Code Online (Sandbox Code Playgroud)

MAPkEvaluator()我的自定义评估师在哪里。我见过类似的问题,但没有答案。

是否有任何示例或文档可用?有谁知道是否可以在PySpark中实现它?我应该采用什么方法?

metrics cross-validation pyspark

3
推荐指数
1
解决办法
679
查看次数

Hive:LEFT JOIN vs JOIN使用ON子句中的过滤器给出不同的结果

假设有两个表:

    table1.c1   table1.c2
1   1           A
2   1           B
3   1           C
4   2           A
5   2           B
Run Code Online (Sandbox Code Playgroud)

    table2.c1   table2.c2
1   2           A
2   2           D
3   3           A
4   3           B
Run Code Online (Sandbox Code Playgroud)

当我做:

select distinct t1.c1, t2.c2
from
schema.table1 t1
join
schema.table2 t2
on (t1.c2 = t2.c2 
    and t1.c1 = t2.c1
    and t1.c1 = 2)
Run Code Online (Sandbox Code Playgroud)

在Hive中,我得到:

    t1.c1   t2.c2
1   2   A
Run Code Online (Sandbox Code Playgroud)

这是预期的结果,没问题.但是,当我这样做时:

select distinct t1.c1, t2.c2
from
schema.table1 t1
left join
schema.table2 t2
on (t1.c2 = t2.c2 
    and t1.c1 …
Run Code Online (Sandbox Code Playgroud)

hive join left-join

1
推荐指数
1
解决办法
2万
查看次数

使用别名透视和聚合 PySpark 数据帧

我有一个与此类似的 PySpark DataFrame:

df = sc.parallelize([
    ("c1", "A", 3.4, 0.4, 3.5), 
    ("c1", "B", 9.6, 0.0, 0.0),
    ("c1", "A", 2.8, 0.4, 0.3),
    ("c1", "B", 5.4, 0.2, 0.11),
    ("c2", "A", 0.0, 9.7, 0.3), 
    ("c2", "B", 9.6, 8.6, 0.1),
    ("c2", "A", 7.3, 9.1, 7.0),
    ("c2", "B", 0.7, 6.4, 4.3)
]).toDF(["user_id", "type", "d1", 'd2', 'd3'])
df.show()
Run Code Online (Sandbox Code Playgroud)

这使:

+-------+----+---+---+----+
|user_id|type| d1| d2|  d3|
+-------+----+---+---+----+
|     c1|   A|3.4|0.4| 3.5|
|     c1|   B|9.6|0.0| 0.0|
|     c1|   A|2.8|0.4| 0.3|
|     c1|   B|5.4|0.2|0.11|
|     c2|   A|0.0|9.7| 0.3|
|     c2| …
Run Code Online (Sandbox Code Playgroud)

alias pivot aggregate-functions apache-spark-sql pyspark

0
推荐指数
1
解决办法
3422
查看次数