场景为: 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文件吗?
答案 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
分隔符上的Row
和split
构造这样的架构
|