gpt4 book ai didi

apache-spark - 将数据从 dstream 写入 parquet

转载 作者:行者123 更新时间:2023-12-01 06:22:49 24 4
gpt4 key购买 nike

使用 pyspark 从 kinesis 消费数据后,我有一个包含如下条目的 dstream:

('filename_1', [{'name': 'test'}, {'name': 'more'}, {'name': 'other'}])
('filename_2', [{'age': 15}, {'age': 25}])

我现在要做的是将元组的第二部分写入元组第一部分标识的位置。

在其他地方,我通过使用以下方法将每个字典列表转换为 DataFrame 来做到这一点:
dataframe = sqlContext.createDataFrame(list_of_dicts)

并用以下内容编写它:
dataframe.write.parquet('filename')

我现在的问题是如何将 dstream 中的每一行转换为 DataFrame。我的直觉是使用 map 来获取每一行并进行转换。这将需要一个 sqlContext ,您实际上无法将其传递给 map 函数,因为它因以下错误而失败:
Exception: It appears that you are attempting to reference SparkContext from a broadcast variable, action, or transforamtion. SparkContext can only be used on the driver, not in code that it run on workers. For more information, see SPARK-5063

我并不完全依赖于 Parquet ,但我需要某种模式(因此绕道到 DataFrame)。有没有办法用 Spark 做到这一点?

最佳答案

您可以在 foreach 中创建 SqlContext 的新实例方法。

words.foreachRDD(
new Function2<JavaRDD<String>, Time, Void>() {
@Override
public Void call(JavaRDD<String> rdd, Time time) {
SQLContext sqlContext = JavaSQLContextSingleton.getInstance(rdd.context());

有关更多详细信息,您可以通过此 link .

关于apache-spark - 将数据从 dstream 写入 parquet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31672398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com