我对spark和scala非常陌生,我试图从现有的数据集a创建一个新的数据集b。数据集a有a、b、c列—我希望数据集b有a、b和d列。列d也应该是布尔值 true 或者 false ,具体取决于c列中的值。例如,假设c列是一个字符串-如果字符串大于10个字符,我希望d列为true,如果字符串小于10个字符,则为false。任何帮助都将不胜感激!!
true
false
lqfhib0f1#
可以使用withcolumn、length和drop。长度检查将返回布尔类型的列。
import org.apache.spark.sql.functions._ import spark.implicits._ val dataJsonStr="""[{"a":1,"b":1.1,"c":"Morethan10chars"},{"a":2,"b":2.2,"c":"lesthn10"}]""" val dataSetA = spark.read.json(Seq(dataJsonStr).toDS) dataSetA.show(false) +---+---+---------------+ |a |b |c | +---+---+---------------+ |1 |1.1|Morethan10chars| |2 |2.2|lesthn10 | +---+---+---------------+ val dataSetB = dataSetA.withColumn("d", length(col("c")) >= 10).drop("c") dataSetB.show(false) +---+---+-----+ |a |b |d | +---+---+-----+ |1 |1.1|true | |2 |2.2|false| +---+---+-----+ dataSetB.printSchema() root |-- a: long (nullable = true) |-- b: double (nullable = true) |-- d: boolean (nullable = true)
1条答案
按热度按时间lqfhib0f1#
可以使用withcolumn、length和drop。长度检查将返回布尔类型的列。