我是新来的,在ms sql中,我们留下了关键字, LEFT(Columnname,1) in('D','A') then 1 else 0 .如何在sparksql中实现相同的功能。
LEFT(Columnname,1) in('D','A') then 1 else 0
watbbzwu1#
你可以用 substring 带正数的函数 pos 从左边取:
substring
pos
import org.apache.spark.sql.functions.substring substring(column, 0, 1)
而且是否定的 pos 从右边取:
substring(column, -1, 1)
所以在scala中你可以定义
import org.apache.spark.sql.Column import org.apache.spark.sql.functions.substring def left(col: Column, n: Int) = { assert(n >= 0) substring(col, 0, n) } def right(col: Column, n: Int) = { assert(n >= 0) substring(col, -n, n) } val df = Seq("foobar").toDF("str") df.select( Seq(left _, right _).flatMap(f => (1 to 3).map(i => f($"str", i))): _* ).show
+--------------------+--------------------+--------------------+---------------------+---------------------+---------------------+ |substring(str, 0, 1)|substring(str, 0, 2)|substring(str, 0, 3)|substring(str, -1, 1)|substring(str, -2, 2)|substring(str, -3, 3)| +--------------------+--------------------+--------------------+---------------------+---------------------+---------------------+ | f| fo| foo| r| ar| bar| +--------------------+--------------------+--------------------+---------------------+---------------------+---------------------+
类似于python:
from pyspark.sql.functions import substring from pyspark.sql.column import Column def left(col, n): assert isinstance(col, (Column, str)) assert isinstance(n, int) and n >= 0 return substring(col, 0, n) def right(col, n): assert isinstance(col, (Column, str)) assert isinstance(n, int) and n >= 0 return substring(col, -n, n)
bfnvny8b2#
要建立在user6910411的答案之上,还可以使用isin,然后使用角色比较的结果构建一个新列。最终的完整代码如下所示
import org.apache.spark.sql.functions._ df.select(substring($"Columnname", 0, 1) as "ch") .withColumn("result", when($"ch".isin("D", "A"), 1).otherwise(0))
h5qlskok3#
import org.apache.spark.sql.functions._
使用 substring(column, 0, 1) 而不是 LEFT 功能。哪里0:字符串中的起始位置1:要选择的字符数示例:考虑一个左函数:
substring(column, 0, 1)
LEFT
LEFT(upper(SKU),2)
相应的sparksql语句是:
substring(upper(SKU),1,2)
3条答案
按热度按时间watbbzwu1#
你可以用
substring
带正数的函数pos
从左边取:而且是否定的
pos
从右边取:所以在scala中你可以定义
类似于python:
bfnvny8b2#
要建立在user6910411的答案之上,还可以使用isin,然后使用角色比较的结果构建一个新列。
最终的完整代码如下所示
h5qlskok3#
使用
substring(column, 0, 1)
而不是LEFT
功能。哪里
0:字符串中的起始位置
1:要选择的字符数
示例:考虑一个左函数:
相应的sparksql语句是: