假设下一个表:
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) 假设下一个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) 我想使用排名指标(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中实现它?我应该采用什么方法?
假设有两个表:
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) 我有一个与此类似的 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)