Onde você precisa usar lit () em Pyspark SQL?
estou a tentar perceber onde é que precisas de usar um valor lit
, que é definido como a literal column
na documentação.
Tome por exemplo este udf
, que devolve o índice de uma lista de colunas SQL:
def find_index(column, index):
return column[index]
Se eu passasse um número inteiro nisto, teria um erro. Eu precisaria passar um valor lit(n)
para a udf para obter o índice correto de um array.
existe um lugar onde eu possa aprender melhor as regras duras e rápidas de quando usar lit
e possivelmente col
como então?
4
1 answers
Para o manter simples, você precisa de um Column
(pode ser um criado usando lit
mas não é a única opção) quando o homólogo do JVM espera uma coluna e não há conversão interna numa capa de Python ou deseja chamar um método específico Column
.
Column
. Também se aplica tipicamente a funções de pyspark.sql.functions
. Noutros casos, é sempre o melhor para verificar a documentação e os documentos strings firsts e se não for suficiente docs de uma contraparte Scala correspondente.
No segundo caso, as regras são simples. Se, por exemplo, quiser comparar uma coluna com um valor, então o valor tem de estar no RHS:
col("foo") > 0 # OK
Ou o valor tem de ser embrulhado com literal:
lit(0) < col("foo") # OK
Pode usar um objecto não-coluna no LHS:
0 < col("foo")
Mas isto só se aplica ao Python e não vai funcionar no Scala. Isto aplica-se, naturalmente, a outros operadores (==,
10
Author: zero323, 2017-02-13 19:59:19