Apache spark 使用Kafka使用Synapse Spark将数据帧写入Azure EventHub
我想用Azure Synapse Spark(在Synapse Analytics工作区中)将一个数据帧写入启用Kafka的Azure事件中心Apache spark 使用Kafka使用Synapse Spark将数据帧写入Azure EventHub,apache-spark,azure-eventhub,azure-synapse,Apache Spark,Azure Eventhub,Azure Synapse,我想用Azure Synapse Spark(在Synapse Analytics工作区中)将一个数据帧写入启用Kafka的Azure事件中心 Apache Spark版本:2.4 Python版本:3.6 Scala版本:2.11.12 这段代码在Databricks中运行得非常完美: # Build SASL: EH_SASL = 'org.apache.kafka.common.security.plain.PlainLoginModule required username=&quo
- Apache Spark版本:2.4
- Python版本:3.6
- Scala版本:2.11.12
# Build SASL:
EH_SASL = 'org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="Endpoint=sb://{}.servicebus.windows.net/;SharedAccessKeyName={};SharedAccessKey={}";'.format(EH_NAMESPACE, EH_CLO_TRANSACTIONS_KEY_NAME, EH_CLO_TRANSACTIONS_KEY_VALUE)
# Write data:
kdf.write.format("kafka")\
.option("kafka.sasl.mechanism", "PLAIN")\
.option("kafka.security.protocol", "SASL_SSL")\
.option("kafka.sasl.jaas.config", EH_SASL)\
.option("kafka.batch.size", 5000)\
.option("kafka.bootstrap.servers", "{}.servicebus.windows.net:9093".format(EH_NAMESPACE))\
.option("kafka.request.timeout.ms", 300000)\
.option("topic", EH_CLO_TRANSACTIONS)\
.save()
在这里,通过Synapse Spark,我得到了以下错误:
java.lang.ClassNotFoundException: org.apache.kafka.common.serialization.ByteArrayDeserializer
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
我相信这与我正在使用的图书馆有关。我现在正在使用:spark-sql-kafka-0-10_2.11-2.4.0.jar
但我也尝试过:
- spark-sql-kafka-0-10_2.11-2.4.8.jar
- spark-sql-kafka-0-10_2.11-2.4.3.jar
- spark-sql-kafka-0-10_2.11-2.4.0.jar
- spark-sql-kafka-0-10_2.11-2.0.2.jar
- spark-sql-kafka-0-10_2.12-2.4.7.jar
- spark-sql-kafka-0-10_2.12-2.4.3.jar
- spark-sql-kafka-0-10_2.12-2.4.0.jar
- azure-eventhubs-spark_2.11-2.3.17.jar
- azure-eventhubs-spark_2.11-2.3.18.jar
谢谢大家! 最后,我设法在不使用Kafka的情况下写入事件中心:我将数据帧保存到Synapse Spark temp表中,然后在Scala中读取该表并按如下方式写入:
scalaDf.selectExpr(“partitionKey”,“body”).write.format(“eventhubs”).options(ehConfig.toMap).save()
但我仍然希望使用Kafka,这样我就不必分两步编写:保存到临时表,然后使用Scala写入EH。。。。