2017-05-09 63 views
0

我需要創造嵌套列表。我的TXT數據就像如何在pyspark中創建嵌套列表?

(telophone號,時間,增量時間,緯度,經度)

... 
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 []列表可以是每行的最後一列。如果我想查看數據[1],我的輸入必須如

(0544147,23,104,40.768749,29.968599) 

我該如何做到這一點?

感謝

回答

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]沒有任何意義,因爲它是一個分佈式系統。

+0

如果我想刪除一條線,我該怎麼做呢? exapmle,如果我想刪除第二行信息? del data.take(2)命令不起作用 – donnie

+0

您無法刪除特定的行......您可以執行的操作是使用'filter'刪除不需要的行。 PySpark不像行中排列的熊貓。如果你的數據不是很大,你可以用'data.toPandas()'把它轉換成一個熊貓數據框,然後刪除它或者首先使用熊貓數據框。 –