如何在Spark中读取固定字符长度格式的文件

数据如下。

[Row(_c0='ACW00011604  17.1167  -61.7833   10.1    ST JOHNS COOLIDGE FLD                       '),
 Row(_c0='ACW00011647  17.1333  -61.7833   19.2    ST JOHNS                                    '),
 Row(_c0='AE000041196  25.3330   55.5170   34.0    SHARJAH INTER. AIRP            GSN     41196')]

我已经按照文档定义了具有正确列宽等的schema_stn。我使用pyspark将其读入数据框的代码如下:

df.select(
    df.value.substr(1, 11).alias('id'),
    df.value.substr(13, 20).alias('LATITUDE'),
    df.value.substr(22, 30).alias('LONGITUDE'),
    df.value.substr(32, 37).alias('LATITUDE'),
    df.value.substr(39, 40).alias('LONGITUDE'),
    df.value.substr(42, 71).alias('LATITUDE'),
    df.value.substr(73, 75).alias('LONGITUDE'),
    df.value.substr(77, 79).alias('LATITUDE'),
    df.value.substr(81, 85).alias('LONGITUDE'))

df = sqlContext.read.csv("hdfs:////data/stn") 
df = (sqlContext.read.format("csv")
        .schema(schema_stn)
        .option("delimiter", " ")
        .load("hdfs:////data/stn")
        )
df.cache()
df.show(3)

我得到以下输出。

In [62]: df.show(3)
+-----------+--------+---------+---------+--------+-------+--------+------------+------+
|         ID|LATITUDE|LONGITUDE|ELEVATION|   STATE|   NAME|GSN FLAG|HCN/CRN FLAG|WMO ID|
+-----------+--------+---------+---------+--------+-------+--------+------------+------+
|ACW00011604|    null|  17.1167|     null|-61.7833|   null|    null|        10.1|  null|
|ACW00011647|    null|  17.1333|     null|-61.7833|   null|    null|        19.2|  null|
|AE000041196|    null|   25.333|     null|    null|55.5170|    null|        null|  34.0|
+-----------+--------+---------+---------+--------+-------+--------+------------+------+

我无法删除这些“ null”(代表空格)。请在此处缺失什么。

板球运动员

您需要阅读为文本行否则分隔符错误

df = spark.read.text("hdfs:////data/stn") 

解析

df = df.select(
    df.value.substr(1, 11).alias('id'),
    df.value.substr(13, 20).alias('LATITUDE'),
    df.value.substr(22, 30).alias('LONGITUDE'),
    df.value.substr(32, 37).alias('c3'),
    df.value.substr(39, 40).alias('c4'),
    df.value.substr(42, 71).alias('c5'),
    df.value.substr(73, 75).alias('c6'),
    df.value.substr(77, 79).alias('c7'),
    df.value.substr(81, 85).alias('c8'))
df.show(3)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在文本文件中读取字符并获取字符长度?

如何在不读取整个文件的情况下找到文件中字符串的长度

读取文件时如何固定行格式

如何使用固定数量的字符在bash中读取文件?

从文件中读取固定长度的整数行(bu

如何在张量流中读取.mat文件格式?

如何在Python中读取格式化的文件?

如何在 Nuke 中读取 DTEX 文件格式?

如何在JLabel中创建固定的“物理”长度字符串

如何在Spark中读取HDFS序列文件

如何在C#中基于字符串的长度读取子字符串

如何在Golang中创建固定长度的文本文件?

如何在Spark Scala中动态读取文本文件(字符串类型数据)映射并将数据加载为拼花格式(具有不同数据类型的多列)

如何在 Swift 中以字符串格式读取字符串的字符?

如何在Go中逐个字符读取文件

读取文件时如何在golang中删除特殊字符?

如何在python中制作固定大小的格式化字符串?

如何在TypeScript中声明固定长度的数组

如何从复杂格式的文件中读取数据?

如何从文件中读取json格式

如何使用Spring Batch解析固定长度格式的文件(无分隔符的文件)

如何在Spark2.4的spark2-shell中读取Avro文件?

如何在C ++中不知道文件长度的情况下从文件中读取2D数组?

如何在Go中获取文件长度?

如何快速格式化具有固定长度的字符串

如何在Apache Spark Scala中读取PDF文件和xml文件?

Spark Scala中的固定长度解析

如何在Spark中读取嵌套集合

如何通过读取.txt文件并将其设置为固定长度来分配变量?