如何在pyspark中创建嵌套列表?

时间:2017-05-09 07:17:32

标签: python python-2.7 apache-spark pyspark

我需要创建嵌套列表。我的txt数据就像

(telophone number,time,delta time,lat,long)

... 
0544144,23,86,40.761650,29.940929
0544147,23,104,40.768749,29.968599
0545525,20,86,40.761650,29.940929
0538333,21,184,40.764679,29.929543
05477900,21,204,40.773071,29.975010
0561554,23,47,40.764694,29.927397
...

我的代码也是

from pyspark import SparkContext


sc = SparkContext()
rdd_data = sc.textFile("data2.txt")

rdd_data_1 = rdd_data.map(lambda line: line.split(","))

tel0 = rdd_data_1.map(lambda line: int(line[0]))
time1 = rdd_data_1.map(lambda line: int(line[1]))
deltaTime2 = rdd_data_1.map(lambda line: int(line[2]))
lat3 = rdd_data_1.map(lambda line: float(line[3]))
lon4 = rdd_data_1.map(lambda line: float(line[4]))

tel0_list =tel0.collect()
time1_list =time1.collect()
deltaTime2_list =deltaTime2.collect()
lat3_list =lat3.collect()
lon4_list =lon4.collect()

正如你所看到的,每列都有一个平均值;电话,时间,增量时间等。但每行也必须使用一个列表。 如果我想看第一个电话号码;

print tel0_list[0]

输入:

0544144

它也有效。但我需要用它创建每个行列表。

例如

Data []列表可以是每行的lıst。如果我想看数据[1],我的输入必须像

(0544147,23,104,40.768749,29.968599)

我该怎么做?

由于

1 个答案:

答案 0 :(得分:0)

由于您的文本文件采用csv格式,因此如果您使用Spark 2.x,则可以轻松将其加载到数据框中:

from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StructField, IntegerType, DoubleType

spark = SparkSession.builder.getOrCreate()

schema = StructType([
            StructField("tel", IntegerType(), True),
            StructField("time", IntegerType(), True),
            StructField("deltatime", IntegerType(), True),
            StructField("lat", DoubleType(), True),
            StructField("long", DoubleType(), True)
        ])

data = spark.read.csv("data2.txt", header=False, schema=schema)

然后您可以使用以下方式访问数据:

>>> data.take(1)
[Row(tel=544144, time=23, deltatime=86, lat=40.76165, long=29.940929)]

注意:访问Spark中的数据[1]没有任何意义,因为它是一个分布式系统。