【问题标题】:Creating rdd from another rdd with required specific columns从另一个具有所需特定列的 rdd 创建 rdd
【发布时间】:2021-04-08 19:05:38
【问题描述】:

我在 Spark 中有一个包含下表数据的文件

Property ID|Location|Price|Bedrooms|Bathrooms|Size|Price SQ Ft|Status

我已使用 rdd 读取此文件:-

a = sc.textFile("/FileStore/tables/realestate.txt")

现在我需要从上述 RDD 创建一个具有 PropertyID、Location、Price(= size * Price SQ Ft)的新 RDD。

我可以通过将其转换为数据框来做到这一点,但无法弄清楚如何使用所需的列将其转换为另一个 RDD。

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql rdd


    【解决方案1】:

    您可以使用地图获取前三列:

    a = sc.textFile("/FileStore/tables/realestate.txt")
    b = a.map(
        lambda x: 
        (x.split('|')[:2] + [float(x.split('|')[5]) * float(x.split('|')[6])]) 
        if x.split('|')[0] != 'Property ID'
        else ['Property ID', 'Location', 'Price']
    )
    

    【讨论】:

    • 是的,非常感谢。你能解释一下为什么使用这个 if else 语句吗?
    • 因为header不能转成float
    • 您能否详细解释一下此 if 语句何时起作用以及 else 部分何时起作用。
    • 除了标题行之外的每一行都满足 if 语句。 else 语句仅适用于标题行
    • 只做df2 = df.select('property id', 'location', (F.col('size')*F.col('price sq ft')).alias('price')
    【解决方案2】:
    def splitfunc(x):
        array=x.split('|')
        return [array[0],array[1],array[5]*array[6]]
    #array[0] is your properties and so on..
    newrdd=rdd.map(splitfunc)
    

    使用 map 函数。在 map 函数中,将 rdd 拆分为分隔符(lines.split('|')),然后在数组中选择必要的列。

    【讨论】:

      猜你喜欢
      • 2019-08-11
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      相关资源
      最近更新 更多