【发布时间】:2017-08-31 22:25:37
【问题描述】:
我在 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 个方法的代码:
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 个上下文...使用 getOrCreate 函数来解决这个问题
-
另外,您是否只看到数据中的编码问题?你确定那是实际的分隔符吗?如果一切都失败了,找出分隔符的原始字节实际上是什么
-
此数据也存在于 SQL 服务器中,用于拆分数据的分隔符是相同的。我如何使用您提到的十六进制代码。我是新蟒蛇和火花?谢谢。
-
这个问题已经在Scala中解决了stackoverflow.com/questions/36007686/…
标签: python pyspark pyspark-sql