CreateDataFrame或SaveAsTable直观地编码在pyspark 1.6



我试图在spark1.6使用pyspark保存一个表。所有的表列都保存为文本,我想知道我是否可以改变这个:

product = sc.textFile('s3://path/product.txt') 
product = m3product.map(lambda x: x.split("t"))
product = sqlContext.createDataFrame(product, ['productid', 'marketID', 'productname', 'prod'])
product.saveAsTable("product", mode='overwrite')

在最后2个命令中是否有一些东西可以自动识别productid和marketid为数字?我有很多文件和很多字段要上传所以理想情况下应该是自动的

最后两个命令中是否有什么东西可以自动将productid和marketid识别为数字

如果你传递intfloat(取决于你需要什么),pyspark将为你转换数据类型。

在您的示例中,更改

中的lambda函数
product = m3product.map(lambda x: x.split("t"))
product = sqlContext.createDataFrame(product, ['productid', 'marketID', 'productname', 'prod'])

from pyspark.sql.types import Row
def split_product_line(line):
    fields = line.split('t')
    return Row(
        productid=int(fields[0]),
        marketID=int(fields[1]),
...
    )
product = m3product.map(split_product_line).toDF()

你会发现控制数据类型和可能的错误/异常检查要容易得多。

尽量禁止lambda函数:)

相关内容

  • 没有找到相关文章

最新更新