无法使用PySpark读取CSV字符串

时间:2019-06-24 21:11:24

标签: python-3.x pyspark azure-databricks

场景为: EventHub-> Azure Databricks(使用pyspark)

文件格式: CSV(带引号,竖线分隔和自定义架构)

我正在尝试读取来自eventhub的CSV字符串。 Spark已成功创建具有正确架构的数据框,但在每条消息后该数据框最终都为空。

我设法在流环境之外进行了一些测试,从文件中获取数据时一切正常,但是当数据来自字符串时失败。

所以我找到了一些链接可以帮助我,但是没有一个起作用:

can-i-read-a-csv-represented-as-a-string-into-apache-spark-using-spark-csv?rq=1

Pyspark - converting json string to DataFrame

现在我有以下代码:

schema = StructType([StructField("Decisao",StringType(),True), StructField("PedidoID",StringType(),True), StructField("De_LastUpdated",StringType(),True)])
body = 'DECISAO|PEDIDOID|DE_LASTUPDATED\r\n"asdasdas"|"1015905177"|"sdfgsfgd"'
csvData = sc.parallelize([body])

df = spark.read \
.option("header", "true") \
.option("mode","FAILFAST") \
.option("delimiter","|") \
.schema(schema) \
.csv(csvData)

df.show()

甚至可以处理CSV文件吗?

1 个答案:

答案 0 :(得分:0)

您可以通过index='index' typ = 'test' server = 'http://172.16.4.141:9200' chunk_size = 20000 headers = {'content-type': 'application/x-ndjson', 'Accept-Charset': 'UTF-8'} records = df.to_dict(orient='records') actions = ["""{ "index" : { "_index" : "%s", "_type" : "%s" } }\n""" % (index, typ) +json.dumps(records[j]) for j in range(len(records))] i=0 while i<len(actions): serverAPI = server + '/_bulk' data='\n'.join(actions[i:min([i+chunk_size,len(actions)])]) data = data + '\n' r = requests.post(serverAPI, data = data, headers=headers) print(r.content) i = i+chunk_size 分隔符上的Rowsplit构造这样的架构

|