我试图在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识别为数字
如果你传递int
或float
(取决于你需要什么),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函数:)