PySpark中的mkString等价物是什么?

时间:2017-10-30 16:07:27

标签: python scala apache-spark pyspark

我正在将数据帧转换为管道分隔值,并将其写入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")

2 个答案:

答案 0 :(得分:2)

这样的事情:

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

<强>解释

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

答案 1 :(得分:0)

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

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

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

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