PySpark:将一列嵌套分成多个新列

时间:2018-02-27 06:58:29

标签: apache-spark pyspark apache-spark-sql spark-dataframe pyspark-sql

我在Hadoop上有一个network.log

{"Source":"Network","Detail":"Event=01|Device=Mobile|ClientIP=10.0.0.0|URL=example.com"}

我想将其作为数据框加载Detail|。然后我想使用=进一步拆分每个新列,左侧部分作为列名称,右侧部分作为值。

预期结果将是:

Source  | Event | Device | ClientIP | URL
Network | 01    | Mobile | 10.0.0.0 | example.com

我完成了第一次拆分,如下所示:

from pyspark import SparkContext
from pyspark.sql import functions, SQLContext

INPUT_PATH = 'network.log'

sc = SparkContext("local", "NetworkEvent")
sqlContext = SQLContext(sc)

raw = sqlContext.read.json(INPUT_PATH)

detail_col = functions.split(raw['Detail'], '\|')

for i in range(4):
    raw = raw.withColumn('col_' + str(i), detail_col.getItem(i))

raw.show()

我的问题是,我可以在detail_col.getItem(i)之上同时进行第二次拆分吗?我可以考虑为新数据框的每一列创建另一个UDF,但是在一个UDF中是否有更优雅的方式?非常感谢!

注意:我使用Spark 1.5.0,所以Pandas' UDF无法使用。

0 个答案:

没有答案