【问题标题】:How to import a 'þ' delimited .txt file in pyspark如何在 pyspark 中导入“þ”分隔的 .txt 文件
【发布时间】: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


【解决方案1】:

正确的optiondelimiter 而不是sep

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

【讨论】:

  • sepdelimiter 的结果没有差异。两种情况下的输出都是相同的。我已将输出包含在上述问题中
  • 使用delimeter 选项和Unicode \u 对Scala 的字符编码,\x 用于pyspark
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 2023-03-07
    • 2013-06-04
    相关资源
    最近更新 更多