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 中的 SparkSession 和 SparkContext 启动