【问题标题】:Confusion on types of Spark RDDs对 Spark RDD 类型的混淆
【发布时间】:2020-01-29 17:00:35
【问题描述】:

我刚刚学习 Spark,从 RDD 开始,现在转向 DataFrame。在我当前的 pyspark 项目中,我正在将 S3 文件读入 RDD 并对其运行一些简单的转换。这是代码。

segmentsRDD = sc.textFile(fileLocation). \
    filter(lambda line: line.split(",")[6] in INCLUDE_SITES). \
    filter(lambda line: line.split(",")[2] not in EXCLUDE_MARKETS). \
    filter(lambda line: "null" not in line). \
    map(splitComma). \
    filter(lambda line: line.split(",")[5] == '1')

SplitComma 是一个函数,它对行数据进行一些日期计算并返回 10 个逗号分隔的字段。一旦我得到它,我就会运行最后一个过滤器,如图所示只拾取字段 [5] = 1 中的值的行。到目前为止一切都很好。

接下来,我想将segmentsRDD 转换为具有如下所示模式的DF。

interim_segmentsDF = segmentsRDD.map(lambda x: x.split(",")).toDF("itemid","market","itemkey","start_offset","end_offset","time_shifted","day_shifted","tmsmarketid","caption","itemstarttime")

但我收到一个关于无法将“pyspark.rdd.PipelinedRDD”转换为 DataFrame 的错误。你能解释一下“pyspark.rdd.PipelinedRDD”和“row RDD”之间的区别吗?我正在尝试使用如图所示的模式转换为 DF。我在这里错过了什么?

谢谢

【问题讨论】:

    标签: pyspark apache-spark-sql rdd


    【解决方案1】:

    您必须在代码中添加以下行:

    from pyspark.sql import SparkSession
    spark = SparkSession(sc)
    

    方法.toDF()不是rdd的原始方法。 如果您查看Spark source code,您会看到方法.toDF()monkey patch

    因此,通过 SparkSession 初始化,您可以调用这个猴子修补方法;换句话说,当您运行 rdd.toDF() 时,您直接运行来自 Dataframe API 的方法 .toDF()

    【讨论】:

    • 我很困惑。我一直在做以下事情(从火花会话派生火花上下文)。从 pyspark.sql 导入 SparkSession 从 pyspark.conf 导入 SparkConf spark = SparkSession.builder.appName('SampleApp').master('local[2]').getOrCreate() sc = spark.sparkContext segmentsRDD = sc.textFile(fileLocation ) .... ....segmentsRDD.repartition(1).saveAsTextFile(('s3://....'))。这一直运作良好。您的代码看起来相反 - 从火花上下文派生火花会话。
    • 是的,当我初始化 spark 会话时,我创建了一个 spark 上下文,所以它可以工作!查看第 211-220 行中的 Spark session
    • @NetRocks 问题得到解答了吗?
    • 进行您建议的更改后,现在我得到“PipelinedRDD”对象没有属性“toDF”。 SplitComma 函数的返回行如下所示 ---- return "{},{},{},{},{},{},{},{},{},{}".format(a, b,c d,e,f,g, h,i,j)。
    • 如果在开头加上我的2行代码,就不会出现这个错误,因为我的初始化正好修复了这个错误。
    猜你喜欢
    • 2020-12-18
    • 1970-01-01
    • 2016-08-08
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 2018-07-17
    相关资源
    最近更新 更多