我想获取一个json文件并映射它,以便其中一列是另一列的子串。例如,取左表并生成右表:
------------ ------------------------
| a | | a | b |
|------------| -> |------------|---------|
|hello, world| |hello, world| hello |
我可以使用spark-sql语法执行此操作,但如何使用内置函数完成?
答案 0 :(得分:8)
可以使用这样的陈述
import org.apache.spark.sql.functions._
dataFrame.select(col("a"), substring_index(col("a"), ",", 1).as("b"))
答案 1 :(得分:5)
您可以使用withColumn
功能
import org.apache.spark.sql.functions.{ udf, col }
def substringFn(str: String) = your substring code
val substring = udf(substringFn _)
dataframe.withColumn("b", substring(col("a"))
答案 2 :(得分:2)
假设您有以下数据框:
import spark.implicits._
import org.apache.spark.sql.functions._
var df = sc.parallelize(Seq(("foobar", "foo"))).toDF("a", "b")
+------+---+
| a| b|
+------+---+
|foobar|foo|
+------+---+
您可以按如下方式从第一列中对新列进行子集化:
df = df.select(col("*"), substring(col("a"), 4, 6).as("c"))
+------+---+---+
| a| b| c|
+------+---+---+
|foobar|foo|bar|
+------+---+---+
答案 3 :(得分:1)
您可以仅使用pyspark
方式进行操作,如以下示例所示:
df.withColumn('New_col', df['Old_col'].substr(0, 7)).show()
答案 4 :(得分:0)
只是为了丰富现有答案。如果您对字符串列的右侧部分感兴趣。那就是:
------------ ------------------------
| a | | a | b |
|------------| -> |------------|---------|
|hello, world| |hello, world| world |
您应该使用负索引:
dataFrame.select(col("a"), substring_index(col("a"), ",", -1).as("b"))