我在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都是全新的,所以请放轻松我:)谢谢。
答案 0 :(得分:1)
你应该使用选项delimeter
和十六进制转义特殊字符:
df = sqlContext.read.format("com.databricks.spark.csv").option("header","true").option("delimeter","\xc3\xbe").load(path).distinct().cache()
答案 1 :(得分:0)
正确的option
是delimiter
而非sep
:
...
.option("delimiter", "þ")