【问题标题】:What is the mkString equivalent in PySpark?PySpark 中的 mkString 等价物是什么?
【发布时间】:2017-10-30 16:07:27
【问题描述】:

我正在将数据帧转换为管道分隔值并将其写入 Spark shell (scala) 中的文件。但我对 PySpark 方面一无所知。不胜感激。

特别是我不知道如何用'|'连接每一列

这是一个scala版本

scala> val stgDF = spark.read.table("tbl")
stgDF: org.apache.spark.sql.DataFrame = [name: string, num: int]

scala> stgDF.map(line => line.mkString("|")).take(2) //How do I do in PySpark?
res0: Array[String] = Array(spark|2001, yarn|2002)

scala> val tmp = stgDF.map(line => line.mkString("|")).rdd
tmp: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[20] at rdd at <console>:25

scala> tmp.saveAsTextFile("stgDF")

【问题讨论】:

    标签: python scala apache-spark pyspark


    【解决方案1】:

    类似这样的:

    stgDF.rdd.map(lambda line: "|".join([str(x) for x in line]))
    

    说明:

    '|'.join 相当于 Scala 中的 mkString - 它接受一个列表作为参数,然后使用分隔符 '|' 连接列表的元素。列表理解[str(x) for x in line] 只是在连接之前将行的所有元素转换为字符串。

    【讨论】:

    • 你能解释一下吗?
    • 希望有帮助
    • 上面只捕获了mkString子集,它有三个参数:(start,join,end)。像往常一样 python 滞后 scala
    【解决方案2】:

    这是一个更紧凑且易于理解的:

    stgDF.rdd.map(lambda x: "|".join(map(str,x)) )
    

    非常适合我。 并保存为文本文件:

    stgDF.rdd.map(lambda x: "|".join(map(str,x)) ).saveAsTextFile("outputFile")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 2014-06-12
      • 1970-01-01
      • 2022-11-28
      • 2021-06-19
      • 2012-07-20
      相关资源
      最近更新 更多