如何在pyspark中导入'þ'分隔的.txt文件

时间:2017-08-31 22:25:38

标签: python pyspark pyspark-sql

我在AWS s3中有一个分隔的.txt文件。该数据以þ 839729þ25þad@xxx.comþfirstnameþlastnameþ0þBLACKþ28/08/2017þ12329038þ99þ287þ81þ0

分隔

我尝试使用databricks and sparkcontext导入数据。虽然databricks方法运行并且没有抛出错误,但数据框中没有数据。火花上下文只是错误地说 - Cannot run multiple SparkContexts at once.

下面是我试过的2个appraoches的代码:

from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession
from pyspark.sql.functions import *

path = "s3:/XXX.txt"
df = sqlContext.read.format("com.databricks.spark.csv").option("header","true").option("sep","þ").load(path).distinct().cache()

第二种方法

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

conf = SparkConf().setMaster("local").setAppName("test")
sc = SparkContext(conf = conf)

path = "s3://XXX.txt"
input = sc.textFile(path).map(lambda x: x.split('þ'))

对于没有数据的第一种方法,它正在读取原始数据中的第一行作为标题,因为df.show(10, False)我获得了以下输出:

|��839729�%25�%zulekhasaiyad@yahoo.com�%Zulekha�%Ali�%0�%Blue�%28/08/2017�%329559038�%12�%128932287�%3081�%0|

我对Spark和扩展PySpark都是全新的,所以请放轻松我:)谢谢。

2 个答案:

答案 0 :(得分:1)

你应该使用选项delimeter和十六进制转义特殊字符:

df = sqlContext.read.format("com.databricks.spark.csv").option("header","true").option("delimeter","\xc3\xbe").load(path).distinct().cache()

答案 1 :(得分:0)

正确的optiondelimiter而非sep

...
    .option("delimiter", "þ")