PySpark 中的 mkString 等价物是啥?

Posted

技术标签:

【中文标题】PySpark 中的 mkString 等价物是啥?【英文标题】: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")

【问题讨论】:

【参考方案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")

【讨论】:

以上是关于PySpark 中的 mkString 等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 Pyspark HiveContext 中,SQL OFFSET 的等价物是啥?

PySpark 中是不是有 .any() 等价物?

pyspark 查询的 SQL 等价物

PySpark 中的 SparkSession 和 SparkContext 启动

Flow 中星号 (*) 类型的用途是啥,TypeScript 中的等价物是啥?

mkString 和 sortByKey 不适用于 Spark 中的数组