如何在新的dataFrame列中正确格式化字符串



我有一个带有两个列col1col2的数据框架(Spark 2.2.0和Scala 2.11)。我需要以以下格式创建一个新列:

=path("http://mywebsite.com/photo/AAA_BBB.jpg", 1)

其中AAAcol1的值,BBB是给定行的col2的值。

问题是我不知道如何正确处理"。我尝试了:

df = df.withColumn($"url",=path("http://mywebsite.com/photo/"+col("col1") + "_"+col("col2")+".jpg", 1))"

更新:

现在可以编译好的,但是列值未插入字符串中。我看到文本col1col2

而不是列值。
df = df.withColumn("url_rec",lit("=path('http://mywebsite.com/photo/"+col("col1")+"_"+col("col1")+".jpg', 1)"))

我明白了:

=path('http://mywebsite.com/photo/col1_col1.jpg', 1)

如注释中所述,您可以多次使用concat,例如:

d.show
+---+---+
|  a|  b|
+---+---+
|AAA|BBB|
+---+---+
d.withColumn("URL" , 
   concat(
       concat(
           concat(
               concat(lit("""=path("http://mywebsite.com/photo/""" ), $"a") ,
               lit("_") ) , $"b" 
           ) 
           , lit(""".jpg", 1) """) 
         ).as[String].first
// String = "=path("http://mywebsite.com/photo/AAA_BBB.jpg", 1) "

或者您可以在数据框架上映射以附加新列(该列比concat方法更干净)

import org.apache.spark.sql.Row
import org.apache.spark.sql.types._
val urlRdd = d.map{ x => 
     Row.fromSeq(x.toSeq ++ Seq(s"""=path("http://mywebsite.com/photo/${x.getAs[String]("a")}_${x.getAs[String]("b")}.jpg", 1)""")) 
    }
val newDF = sqlContext.createDataFrame(urlRdd, d.schema.add("url", StringType) )
newDF.map(_.getAs[String]("url")).first
// String = =path("http://mywebsite.com/photo/AAA_BBB.jpg", 1)

这是一个古老的问题,但我在这里为其他任何人提供了答案。您可以使用format_string功能

scala> df1.show()
+----+----+
|col1|col2|
+----+----+
| AAA| BBB|
+----+----+
scala> df1.withColumn(
            "URL",
            format_string(
                """=path("http://mywebsite.com/photo/%s_%s.jpg", 1)""", 
                col("col1"), 
                col("col2")
            )
        ).show(truncate = false)
+----+----+--------------------------------------------------+
|col1|col2|URL                                               |
+----+----+--------------------------------------------------+
|AAA |BBB |=path("http://mywebsite.com/photo/AAA_BBB.jpg", 1)|
+----+----+--------------------------------------------------+

相关内容

  • 没有找到相关文章

最新更新