Można wykorzystanie rozróżnianie wielkości liter:
val df = sc.parallelize(Seq(
(1L, "Fortinet"), (2L, "foRtinet"), (3L, "foo")
)).toDF("k", "v")
df.where($"v".rlike("(?i)^fortinet$")).show
// +---+--------+
// | k| v|
// +---+--------+
// | 1|Fortinet|
// | 2|foRtinet|
// +---+--------+
lub proste równość z lower
/upper
:
import org.apache.spark.sql.functions.{lower, upper}
df.where(lower($"v") === "fortinet")
// +---+--------+
// | k| v|
// +---+--------+
// | 1|Fortinet|
// | 2|foRtinet|
// +---+--------+
df.where(upper($"v") === "FORTINET")
// +---+--------+
// | k| v|
// +---+--------+
// | 1|Fortinet|
// | 2|foRtinet|
// +---+--------+
Dla prostych filtrów wolałbym rlike
chociaż wydajność powinna być podobna, do join
warunkach równości jest znacznie lepszym wyborem. Aby uzyskać szczegółowe informacje, patrz How can we JOIN two Spark SQL dataframes using a SQL-esque "LIKE" criterion?.
@ zero3232 mam ten problem z całej tabeli. Chodzi mi o to, że potrzebuję, aby moja aplikacja zapewniała wielkość liter. czy istnieje rozwiązanie, dzięki któremu można uzyskać wyniki SQLServer (gdzie ignoruje przypadek za każdym razem)? –